zoukankan      html  css  js  c++  java
  • oc(object-c)知识汇总/总结/区别对比(持续更新)

    1、判断某个类是否实现了某方法: 

    A *a =[[A alloc] autorelease]; 

    if([a respondsToSelector:@selector(methodName)])
    {
    //do something
    }else{

    //do other something
    }

    2、判断某个类是否实现了某协议: 

    A *a =[[A alloc] autorelease]; 
    
    if([a conformsToProtocol:@protocol(protocolName)])
    { 
    //do something 
    }else{ 
    
    //do other something 
    }

    3、new与alloc]init]区别:new其实就是等价于alloc]init]

    4、在头文件声明私有方法:用Categor(分类)

    5、类似java的toString方法:

    -(NSString *)description{
    
    return you string
    
    }

    6、判断一个对象是否为空

    self=[super init];
    if(self=[super init]){//或者 if(self)
    }

     7、self的两种状态:如果是动态方法调用就代表对象,静态方法调用就代表类。

    8、在接口体内的变量默认是保护的(protected)

    @interface Student:NSObjedt{
    //protected
    int age;
    }
    //这里的默认是public
    @end

    9、对变量生成getter和setter方法的历史演变

    最初是手动编写get和set方法,后来有了@property之后可以用@synthesize代替,只要在m文件添加了”@synthesize 变量名“ 那么默认会去访问与该变量名同名的变量,

    如果找不到同名的变量,会自动生成一个私有的同名变量。在xcode4.5以后的版本就可以省略@synchesize了,可以用“_变量名” 访问同名变量,其作用等同于@synchesize

    10、

    创建NSRange变量的三种方式:

    1>  NSRange range;
    
    range.location=1;
    
    range.lenght=1;
    
    2> NSRange range={1,1};//或者NSRange range={.location=1,.length=1};
    
    3> NSRange range=NSMakeRange(1,1);

    11、NSPoint与CGPoint的区别:其实没区别,NSPoint只是CGPoint的别名,CGPoint是一个结构体.相关代码:

    struct CGPoint {
    CGFloat x;
    CGFloat y;
    };
    typedef CGPoint NSPoint;

    CGSize/NSSize、CGRect/NSRect的区别同上。

    12、几个可能容易混淆的类/结构体:

    1>  NSRange 表示范围,一般用来指定一个字符串,集合等的子集范围。location表示从哪里开始,lenght表示从开始点到结束点的长度。创建方法看上面。其中有一种

    NSRange range=NSMakeRange(1,1);

    2> CGPoint/NSPoint 表示平面上的一个点。x表示x轴,y表示y轴,创建方式:

    CGPoint p=CGPointMake(1,1);
    
     NSPoint p=NSMakePoint(1,1);

    3> CGSize/NSSize 表示宽度和高度,比如一个矩形的宽高,属性有width height。创建方式:

    CGSize s=CGSizeMake(1,1);
    
    NSSize s=NSMakeSize(1,1);

    4> CGRect/NSRect 表示一个控件的左上角坐标和控件的宽和高,是2>和3>的结合体,看定义:

    struct CGRect {
    CGPoint origin;
    CGSize size;
    }

     

    创建方式 

      CGRect r=CGRectMake(1,1,1,1);
       NSRect r=NSMakeRect(1,1,1,1);
    还有其他创建方式,不讨论

    13、NSString的几/7种创建方式:
      //1、这种方式创建,不需要释放内存
      NSString*str1=@"A String";
    
      //2、
       NSString*str2=[[NSString alloc]init];
      str2=@"B String";
      [str2 release];
      
      //3、
      SString*str3=[[NSString alloc]initWithString:@"C string!"];
      [str3 release];
      
      //4、静态方法创建对象,不需要管理内存
      str4=[NSString stringWithString:@"c string!"];
     
      //5、   NSString *str5 = [[NSString alloc] initWithUTF8String:"D string!"];   [str5 release];   //6、    NSString *str6 = [[NSString alloc] initWithFormat:@"my age is %i and height is %.2f",28,1.65f];   [str6 release];
        //7、

    char *cString =“c字符串”;

    NSString *str7 =[[NSString alloc]initWithCString:cString encoding:NSUTF8StringEncoding];

    [str7release];

    另外还有很多种从其他类转化成字符串的方法,比如

    NSStringFromxxx系列方法和[NSString stringWithxxx ]系列方法

     14、字符串操作:

    字符串截取

    //从form到字符串末尾,包括form的位置
    - (NSString *)substringFromIndex:(NSUInteger)from;
    //从字符串开始到to位置,不包括to位置 - (NSString *)substringToIndex:(NSUInteger)to;
    //截取range范围内的字符串 - (NSString *)substringWithRange:(NSRange)range;
    //利用给定的分隔符截取分隔符分开的子字符串数组
    - (NSArray *)componentsSeparatedByString:(NSString *)separator;

    比较字符串

    - (BOOL)isEqualToString:(NSString *)aString;

    //是否以。。结尾

    - (BOOL)hasSuffix:(NSString *)aString;

    判断字符串以..开头

    - (BOOL)hasPrefix:(NSString *)aString;

    比较字符串

    //下列方法会逐个字符的比较,返回的NSComparisonResult包含升序,相等,降序三个值(NSOrderedAscending NSOrderedSame  NSOrderedDescending)

    - (NSComparisonResult)compare:(NSString *)string;

    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;

    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;

    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale; /

    //忽略大小写比较

    - (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;

    大小写操作:

    - (NSString *)uppercaseStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//全部转成大小

    - (NSString *)lowercaseStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//全部转成小写

    - (NSString *)capitalizedStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//仅首字母转大小

     

    类似java的indexOf方法:

    - (NSRange)rangeOfString:(NSString *)aString;//如果包含则返回aString的位置,否则返回location为-1,length为0

    NSString *string=@“abcdefg”;
    
    NSRange range=[string rangeOfString:@“bcd”];
    if(range.location==NSNotFound){
    //do something
    }else{
    NSLog(@“找到的范围:%@”,NSStringFromRange(range));
    }

    //下面的mask是指定从哪里开始搜索即从头向尾还是从尾到头的顺序搜索

    - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;

    NSString *string=@“abcdefg”;
    //从尾到头的顺序搜索
    NSRange range=[string rangeOfString:@“bcd” options:NSBackwardsSearch];
    if(range.location==NSNotFound){
    //do something
    }else{
    NSLog(@“找到的范围:%@”,NSStringFromRange(range));
    }

    //下面的searchRange是指定要搜索的范围

    - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

    - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(NSLocale *)locale NS_AVAILABLE(10_5, 2_0);

     

    更多字符串操作参考官方文档

    15、让数组的每个元素都调用同一个方法

    NSArray  *arr=[NSArray arrayWithObjects:obj1,obj2,obj3,nil];
    
    [arr makeObjectsPerformSelector:@selector(methodName)];

    16、数组操作

    //顺序遍历数组,
    NSArray *array=[NSArray arrayWithObjects:obj1,obj2,obj3,nil];
    NSEnumerator *enumerator=[array objectEnumerator];
    id *obj=nil;
    while(obj=[enuerator nextObject]){
    //do something
    }
    
    //逆序逆向遍历数组
    NSArray *array=[NSArray arrayWithObjects:obj1,obj2,obj3,nil];
    NSEnumerator *enumerator=[array reverseObjectEnumerator];
    id *obj=nil;
    while(obj=[enuerator nextObject]){
    //do something
    }
    //获取没有被遍历过的数组元素
    NSArray *array=[enumerator allObjects];

    //block遍历数组

    NSArray *arr=[NSArray arrayWithObjects:@""nil];

        [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

            NSLog(obj);

            if (idx==3) {

                stop=YES;

            }

        }];

    
    

    //利用block进行排序

        NSArray *arr=[NSArray arrayWithObjects:@"", nil];

        [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            if(obj1.xx1 campare obj2.xx1==NSOrderedSame){

                return [obj1.xx2 campare obj2.xx2 ];

            }}];
     
    //利用描述器进行数组排序

    NSArray *arr=[NSArray arrayWithObject:person1,person2,nil];

    //先名字排序
    NSSortDescriptor *desc1=[NSSortDescriptor sortDescriptorWithKey:@“name ascending:YES];
    //再年龄排序

    NSSortDescriptor *desc2=[NSSortDescriptor sortDescriptorWithKey:@“age“ ascending:YES];

    //再….排序

    NSArray *descArr=[NSArray arrayWithObjects: desc1, desc2,nil];
    NSArray sortArr=[arr sortedArrayUsingDescriptors:descs];
     

     17、字典操作:

    //遍历字典
    //快速遍历方式
    for(NSString *key in dictionary){
    id *value=[dictionary objectForKey:key];
    }
    //迭代器遍历
    -(NSEnumerator*)keyEnumerator
    -(NSEnumerator*)objectEnumerator
    //block遍历
    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key,id object,BOOL stop){
    //do something
    }

    18、

    将基本类型char short int long longlong float double、bool integer unsignedInteger封装成对象

    或者将对象解包成char short int long longlong float double、bool integer unsignedInteger基本类型

    //以int为例,其他类似,具体参考官方稳定
    NSNumber *number=[NSNumber numberWithInt:11
    ];
    int myInt=[number intValue
    ];

    19、

     

    //将NSPoint、NSSize、NSRect等结构体包装成对象,再解包成结构体,以NSPoint为例

    1、

    NSPoint point=NSMakePoint{1,1};

    NSValue * value=[NSValue valueWithPoint:point;

    NSPoint point2=[value pointValue];


    2、

    CGPoint point={1,1};

        char *type=@encode(CGPoint);  

        NSValue * value=[NSValue value:&point withObjCType:type];

        CGPoint point2;

        [value getValue:&point2];

     20、时间/日期操作

    //格式化时间/日期
    NSDate *date=[NSDate date];
    NSDateFormatter *formatter=[[NSDateformatter alloc]init];
    formatter.dateFormat=@“yyyy-MM-dd hh:mm:ss”;//如果是HH表示24进制,hh是12进制,比如晚上11点如果是24进制显示的时23,12进制是11
    NSString *dateString=[formatter stringFromDate:date];
    [formatter release];

    //日期与字符串互转
    NSDateFormatter *formatter=[[NSDateformatter alloc]init];
    formatter.dateFormat=@“yyyy-MM-dd hh:mm:ss”;//如果是HH表示24进制,hh是12进制,比如晚上11点如果是24进制显示的时23,12进制是11
    NSString *dateString=[formatter stringFromDate:date];
    NSDate *date=[formatter DateFromString:@"2014-11-11 11:11:11"];

    [formatter release];
    //返回当地时间
    NSDate *date=[NSDate date];
    NSDateFormatter *formatter=[[NSDateformatter alloc]init];
    formatter.dateFormat=@“yyyy-MM-dd hh:mm:ss”;//如果是HH表示24进制,hh是12进制,比如晚上11点如果是24进制显示的时23,12进制是11
    formatter.locale=[[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] autorelease]; NSString *dateString=[formatter stringFromDate:date]; [formatter release];

     

     


    21、object的反射实现

    //判断某个对象是否属于某个类或其子类的对象
    id stu=[[[Student alloc]init]autorelease];
    [stu isKindOfClass:[Student class]];
    //判断某个对象是否属某个类子类的对象(不包括其子类的对象)
    //定时执行某方法,这里是2秒后执行
    [stu performSelector:@selector(test@:) withObject:@“abc” afterDelay:2];
    
    //object-c的反射
    Class class=NSClassFromString(@”Student“);
    Student *stu=[[class alloc] init]
    
    //获Class的类名字符串表示
    Class class=[Student class];
    NSString *className=NSStringFromClass(class);
    
    //通过反射调用方法
    SEL selector=NSSelectorFromString(@“method name”);
    [stu performSelector:selector withObject:@“Mike”];
    //将方法变成字符串
    NSStringFromSelector(@selector(mehtodName)

     22、设置UIView的四个角的弧度

    self.contentView.layer.cornerRadius=10;

     23、颜色/背景颜色

    + (UIColor *)blackColor;      // 0.0 white 
    + (UIColor *)darkGrayColor;   // 0.333 white 
    + (UIColor *)lightGrayColor;  // 0.667 white 
    + (UIColor *)whiteColor;      // 1.0 white 
    + (UIColor *)grayColor;       // 0.5 white 
    + (UIColor *)redColor;        // 1.0, 0.0, 0.0 RGB 
    + (UIColor *)greenColor;      // 0.0, 1.0, 0.0 RGB 
    + (UIColor *)blueColor;       // 0.0, 0.0, 1.0 RGB 
    + (UIColor *)cyanColor;       // 0.0, 1.0, 1.0 RGB 
    + (UIColor *)yellowColor;     // 1.0, 1.0, 0.0 RGB 
    + (UIColor *)magentaColor;    // 1.0, 0.0, 1.0 RGB 品红
    + (UIColor *)orangeColor;     // 1.0, 0.5, 0.0 RGB 橙色
    + (UIColor *)purpleColor;     // 0.5, 0.0, 0.5 RGB 紫色
    + (UIColor *)brownColor;      // 0.6, 0.4, 0.2 RGB 棕色
    + (UIColor *)clearColor;      // 0.0 white, 0.0 alpha 透明度和灰度都是0

    要清除uiview的背景颜色:view.backgroundColor=[UIColor clearColor];

    24、设置UILable自动换行:

    UILable label=[[UILable alloc] init];
    label.numberOfLines=0;//自动换行
    label.textColor=[UIColor whiteColor];
    label.textAlignment=NSTextAlignmentCenter//设置文字的排列方式

     25、UIApplication的一些功能

    //设置ios应用在手机桌面显示的图标右上角显示数字:
    [UIApplication sharedApplication].applicationIconBadgeNumber=10;//10就是那个数字,可以随意改成其他数字
    //判断程序运行状态//2.0以后
    //UIApplicationStateActive激活状态
    //UIApplicationStateInactive不激活的状态
    //UIApplicationStateBackground//进入后台
    ([UIApplication sharedApplication].applicationState==UIApplicationStateInactive){
    }
    //阻止屏幕变暗进入休眠状态2.0
    [UIApplication sharedApplication].iconTimerDisabled=YES;
    //显示手机网络状态2.0
    [UIApplication sharedApplication].networkActivityingDiscatorVisible=YES;
    //在map地图上显示一个地址
    NSSting *address=@”xxxx“;
    address=[address stringByAddingPercentEscapesUsingEncoding:NSASCiiStringEncoding];
    NSString * url=[NSString stringWithFormat:”http://maps.google.com/maps?q=%@“,url];
    [UIApplication sharedApplication].openURL:[NSURL URLWithString:url];
    //打开一个网址
    [UIApplication sharedApplication].openURL:[NSURL URLWithString:@“sms:http://xx.com"];
    //打电话到指定号码功能
    [UIApplication sharedApplication].openURL:[NSURL URLWithString:@“tel:15007553054”];
    //发送短信功能 
    [UIApplication sharedApplication].openURL:[NSURL URLWithString:@“sms:15007553054”];
    //发送电子邮件
    http://www.cnblogs.com/langtianya/p/4052882.html

       26、 移除栈定的视图

        [self.navigationController popViewControllerAnimated:YES];

     

      视图控制器自己把自己从父视图控制器中移除

    //Removes the receiver from its parent in the view controller hierarchy.

    [self.navigationController removeFromParentViewController];

     子视图父视图窗口中断开链接并从响应链中删除

    [self.view removeFromSuperview];

     

    27、刷新UITableview的界面

     //刷新界面
    /
    /带动画删除

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

    {

    .........此处省略一万字^ _ ^

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];

    //重新向数据源请求数据,重新渲染所有的cell
    //        [tableView reloadData];

     

     

    28、 NSDictionary、 NSMutableDictionary、 NSData、 NSMutableData、NSArray、 NSMutableArray、 NSString、  NSMutableString等类拥有相同/相似方法名词的方法:

    //像- (NSString *)description;、- (BOOL)isEqual:(id)object;等从父类继承的方法就不说了,这里说的时并不是从父类继承的,但是却有相同名词的方法
    
    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
    - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically; // the atomically flag is ignored if url of a type 
    
    + (NSDictionary *)xxxWithContentsOfFile:(NSString *)path;
    + (NSDictionary *)xxxWithContentsOfURL:(NSURL *)url;
    - (NSDictionary *)initWithContentsOfFile:(NSString *)path;
    - (NSDictionary *)initWithContentsOfURL:(NSURL *)url;

    //相同性更多的是NSDictionary家族与NSArray家族,除了上面的方法外还有:

    - (void)removeAllObjects;

     29、持久化数据有5种方式:

         1MXL属性列表归档(plist文件)  2 NSKeyedArchiver归档  3 Preference 偏好设置归档  4 SQLite3存储  5 Core data归档

    30、常用16种视图切换动画

    效果和源码下载地址:http://code4app.com/ios/%E5%B8%B8%E7%94%A816%E7%A7%8D%E8%A7%86%E5%9B%BE%E5%88%87%E6%8D%A2%E5%8A%A8%E7%94%BB/500903b76803fa2f43000000

     31 、隐藏Status bar(状态栏)、NavigationBar(导航栏)、tabBarController(标签栏) (2011-12-17 16:08:04)

    
    标签: ios    分类: iOS开发
     
    隐藏Status bar(状态栏)
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    隐藏NavigationBar(导航栏)
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    隐藏tabBarController(标签栏)   尺寸改成大于480就OK。
    [self.tabBarController.view setFrame:CGRectMake(0, 0, 320, 520)];

    转载注明原文:http://www.cnblogs.com/langtianya/p/4018728.html

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/langtianya/p/4018728.html
Copyright © 2011-2022 走看看