3 min read

读《Objective-C基础教程》

Objective-C基础
  1. Cocoa对其所有函数,常量和类型名称都添加来NS前缀。该前缀表明函数来自Cocoa而不是其他工具包。

  2. @符号是Objective-C在标准C语言基础上添加的特性之一。双引号中打字符串前有一个@符号,这表示引用的字符串应该作为Cocoa的NSString元素来处理。

  3. Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间。YES定义为1,NO定义为0(使用#define)。

  4. Objective-C中所有对象间的交互都是通过指针实现的。

  5. 导入头文件的两种不同的方法:

    • #import <Cocoa/Cocoa.h>,用于导入系统头文件。
    • #import “Tire.h”,导入项目本地的头文件。
  6. 比较字符串时,应该使用isEqualToString;==只判断字符串的指针数值。

  7. 如果在声明方法时添加来加号,那么该方法就是类方法。

  8. Objective-C运行时生成一个类的时候,会创建一个代表该类的类对象。类对象包含了指向超类的指针,类名和指向类方法列表的指针。类对象还包含一个long型的数据,为新创建的类实例对象指定大小(以字节为单位)。

  9. NSArray只能存储Objective-C的对象,而不能存储C语言中的基本数据类型和nil(对象的零值或NULL值)。

Cocoa内存管理
  1. 当你使用new,alloc或copy方法获得一个对象,其保留计数器值为1,需要安排该对象的死亡,通常使用release消息实现。
    当你使用任何其他方法获得一个对象时,则不需要关心如何销毁该对象。
    如果保留某个对象,则必须保持retain方法和release方法的使用次数相等。

  2. 当对象接收到autorelease消息时,该对象被放入NSAutoreleasePool中。当自动释放池被销毁时,会向池中的对象发送release消息,所有被自动释放的对象都将其保留计数器减1。如果保留计数器值归0,则对象被销毁。

  3. 对象初始化

    • 如果在初始化对象时出现问题,则init方法可能返回nil。
    • 如果构造了一个初始化函数,则一定要在你自己的指定初始化函数中调用超类的指定初始化函数。

类别

  1. 类声明格式
@interface NSString(NumberConvenience)

-(NSNumber*)lengthAsNumber;

@end
  1. 类别的局限性:

    • 无法向类中添加新的实例变量。类别没有位置容纳实例变量。
    • 名称冲突,即类别中的方法与现有的方法重名。当发生名称冲突是,类别具有更高的优先级。类别方法将完全取代初始方法,从而无法在使用初始方法。
  2. 类别的作用

    • 将类的实现分散到多个不同文件或多个不同框架中。
    • 创建对私有方法的前向引用。
    • 向对象添加非正式协议。

委托

委托是一种对象,另一个类的对象会要求委托对象执行它的某些操作。

协议

  1. 正式协议
    是一个命名的方法列表。与非正式协议不同,正式协议要求显式地采用协议。采用协议的方法是在类的
    @interface声明中列出协议的名称。

  2. 协议声明的格式:

@protocol NSCoping
	
-(id)copyWithZone:(NsZone*) zone;