读《Objective-C基础教程》
Objective-C基础
-
Cocoa对其所有函数,常量和类型名称都添加来NS前缀。该前缀表明函数来自Cocoa而不是其他工具包。
-
@符号是Objective-C在标准C语言基础上添加的特性之一。双引号中打字符串前有一个@符号,这表示引用的字符串应该作为Cocoa的NSString元素来处理。
-
Objective-C中的
BOOL
实际上是一种对带符号的字符类型(signed char
)的定义(typedef),它使用8位存储空间。YES定义为1,NO定义为0(使用#define
)。 -
Objective-C中所有对象间的交互都是通过指针实现的。
-
导入头文件的两种不同的方法:
#import <Cocoa/Cocoa.h>
,用于导入系统头文件。#import “Tire.h”
,导入项目本地的头文件。
-
比较字符串时,应该使用
isEqualToString
;==只判断字符串的指针数值。 -
如果在声明方法时添加来加号,那么该方法就是类方法。
-
Objective-C运行时生成一个类的时候,会创建一个代表该类的类对象。类对象包含了指向超类的指针,类名和指向类方法列表的指针。类对象还包含一个
long
型的数据,为新创建的类实例对象指定大小(以字节为单位)。 -
NSArray只能存储Objective-C的对象,而不能存储C语言中的基本数据类型和nil(对象的零值或NULL值)。
Cocoa内存管理
-
当你使用new,alloc或copy方法获得一个对象,其保留计数器值为1,需要安排该对象的死亡,通常使用release消息实现。
当你使用任何其他方法获得一个对象时,则不需要关心如何销毁该对象。
如果保留某个对象,则必须保持retain方法和release方法的使用次数相等。 -
当对象接收到autorelease消息时,该对象被放入NSAutoreleasePool中。当自动释放池被销毁时,会向池中的对象发送release消息,所有被自动释放的对象都将其保留计数器减1。如果保留计数器值归0,则对象被销毁。
-
对象初始化
- 如果在初始化对象时出现问题,则init方法可能返回nil。
- 如果构造了一个初始化函数,则一定要在你自己的指定初始化函数中调用超类的指定初始化函数。
类别
- 类声明格式
@interface NSString(NumberConvenience)
-(NSNumber*)lengthAsNumber;
@end
-
类别的局限性:
- 无法向类中添加新的实例变量。类别没有位置容纳实例变量。
- 名称冲突,即类别中的方法与现有的方法重名。当发生名称冲突是,类别具有更高的优先级。类别方法将完全取代初始方法,从而无法在使用初始方法。
-
类别的作用
- 将类的实现分散到多个不同文件或多个不同框架中。
- 创建对私有方法的前向引用。
- 向对象添加非正式协议。
委托
委托是一种对象,另一个类的对象会要求委托对象执行它的某些操作。
协议
-
正式协议
是一个命名的方法列表。与非正式协议不同,正式协议要求显式地采用协议。采用协议的方法是在类的
@interface
声明中列出协议的名称。 -
协议声明的格式:
@protocol NSCoping
-(id)copyWithZone:(NsZone*) zone;