《黑马程序员》 细节总结(Objective - c语法)

1.设置实例变量值的方法通常称为设置函数setter,而用于检索实例变量值的方法叫做获取函数getter.getter一般为变量名,而setter一般为set+变量名(第一个字母大写).

 

 2.合成存取器方法: 在接口定义部分使用@property指令标识属性,然后在实现部分使用@synthesize指令即可.
    eg:      @property int sum;
            @synthesize sum;
 
3.创建方法名时,参数名实际上是可选的.如
        -(int) set: (int)n int) d;
        这个方法名为: set::,要调用这个方法如下:
        [ aFraction set:1 :3];
 
4.静态变量声明仍为static关键字修饰,如:static int hiCount=0;
 
5.有一个名为new的方法可以将alloc和init的操作结合起来.
    eg:       Fraction *myFraction = [Fraction new];
 
6.id类型可以存任何的对象,而且对于返回值和参数类型来说,id是默认的类型,如下声名了一个返回为id类型的方法.
    eg:                        -allocInit;
 
7.承继时方法的调用:首先检查该对象所属的类,如果有指定名称的方法,则调用它,如果没有,就检查它的父类,父类有时则调用,否则继续向上寻找.
       
8.分类(category)机制允许你以模块方式向现有类定义添加新方法,也就是,不必经常给同一接口和实现文件增加新定义.
      eg:         @interface Fraction (MathOps)
                //fun declaration...
              @end

 

        @implementation Fraction (MathOps)
            //fun implement...
       @end
 
9.@class 类名,为向前声名.
       
10.编译时检查和运行时检查:
        在给指定类型对象发送消息时,为编译时检查.
        而给id类型对象发送消息时,为运行时检查.
       
11.RTTI:
          1.获得类对象:   [Square class]
                                    eg:如查看obj1与obj2是不是相同的类的实例.
          if([obj1 class] == [obj2 class] ) ...
          2.查看变量是不是不Fraction类的实例:
          [myFraction isMemberOf: [Fraction class]];
          3.要查看实例是否响应指定方法:
          [myFraction instancesRespondToSelector: @selector(setTover];
       
12.如果类包含多个初始化的方法,其中一个就应该是指定的(designated)初始化方法,并且其它所有初始化方法都使用这个初始化方法.
       
13.协议:多个类共享的一个方法列表,协议中列出的方法没有相应的实现.
    eg:       @protocol NSCopying
               -(id) copyWithZoneNSZone *)zone;
               @end
        注意:协议是无类的,它不引用任何类.
       
14.预处理程序:
           1.   #define   与C语言的相同.
           2. 条件编译:
eg:                                #ifdef   
           ...
                                     #else
                ...  
                                     #endif
     
15.语言的基本特性:
          1.数组初始化不同之处:
          可以通过将元素编号放在一对大括号中可以以任意顺序初始化指定的数组元素.
eg:         int x=1233;
          int a[]={ [9]=x+1, [2]=3, [1]=2, [0]=1};
       
16.使用Foundation提供的数组,集合时,它们只能存放对象,所以不能将基本类型数据存放其中.要存放任意基本类型,可以使用NSNumber类根据这些数据类型来创建对象.
eg:       NSNumber类方法:
        +(NSNumber*)numberWithIntegerint) value;           
        numberWithFloat;
        numberWithLong;
        numberWithChar;
        integerValue longValue floatValue doubleVaue charValue
        一般来说,你负责对此类的检索,如果在NSNumber对象中存储了一个值,那么也要用一致的方式进行检索.
       
17.对于NSArray.类方法arrayWithObjects:可以用来创建使用一列对象作为元素的数组,必须把该列表的最后一个值指定为nil,它实际上并不存在数组中.
        要使用数组索引数来检索其中一个元素,用objectAtIndex:方法.
                            
18.各种容器类如:NSArray,NSDictionary,NSSet等,会将引入的元素的引用计数值来加1来获得所有权,而元素被移除时或者整个窗口对象被释放时,释放容器内所有权.
       
19.快速枚举数组或集合中的对象:
    eg:                        for (AddressCard *theCard in book)
          //op theCard...
       
20.复制对象:
        Foundation类提供了名为copy和mutableCopy方法,可以使用这些方法创建对象的副本.
        注意:产生一个对象的可变副本并不要求被复制对象本身是可变的.这种情况同样适用于不可变副本,可以创建可变对象的不可变副本.
    使用copy或mutableCopy方法创建的对象采用的是浅复制,它意味着使用mutableCopy方法复制数组时,在内存中为新的数组对象分配了空间.并且单个元素复制到新数组中.
    要使自己的类支持copy方法,则自己的类必须尊守<NSCopying>协议. 实现 copyWithZone:方法来响应copy消息.
posted @ 2015-04-04 22:18  画梦醉红尘  阅读(132)  评论(0编辑  收藏  举报