1. 内存管理 引用计数(保留计数) 每个对象有一个与之相关联的整数,称作它的引用计数器。当某段代码需要访问一个对象时,该段代码将该对象de保留计数器值加1。当这段代码结束对象访问时,将对象de保留计数器减1。当保留计数器值为0时,对象将被销毁,其占有的内存被系统回收。 当一个对象因其保留计数器归0而即将被销毁时,Objective-C自动向对象发送一条dealloc消息。 retain方法返回一个id类型的值,通过这种方法可以嵌套执行带有其他消息发送参数的保留调用,增加对象的保留计数器值并要求对象完成某种操作。 所有权 实体要负责确保对其拥有的对象进行清理。 自动释放池(autorelease pool) Cocoa的内存管理规则 (1)当你使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1。当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。 (2)当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理。 (3)如果你保留了某个对象,你需要释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。 2. 对象初始化 [类名 new] [[类名 alloc] init] 初始化是从操作系统取得一块内存,准备用于存储对象。 (id)init { if(self = [super init]) { //初始化参数的值 }else {return nil;} return self; } [super init],使超类完成它们自己的初始化工作。 指定初始化函数 类中的某个初始化方法被指派为初始化函数,该类的所有初始化方法使用指定初始化函数执行初始化操作。子类使用其超类的指定初始化函数实现超类的初始化。一般接受参数最多的初始化方法最终成为指定初始化函数。 3. 特性 @property与@synthesize @property是一种新的编译器功能,表示声明了一个新对象的属性。 @synthesize也是一种新的编译器功能,表示创建该属性的访问器。 相应的涵盖setter()与getter()方法。 4. 类别(category) 利用Objective-C的动态运行时的分配机制,为现有的类添加新方法。 类别的声明格式: @interface 类名 (类别名) (添加的新方法) @end 类别的局限性:无法向类中添加新的实例变量;名称冲突,即类别中的方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。 5. 协议(protocol) Objective-C中一种特有的继承方式,它声明了一系列方法,却不实现,仅仅是定义了其他对象有责任实现的接口,里面的方法可以被任何一个类实现。 协议的声明格式: @protocol 协议名 (方法名) @end 使用协议的方法: 在类的声明中使用协议,在其后用尖<>括号括起来,若引用多个协议,协议中间用“,”隔开。 引用协议意味着需要实现协议的所有方法。 一个类只能继承一个父类,但可以实现多个协议 在协议的方法前可以添加@optional 和 @required指令 -@optional :表示该方法是可选实现的 -@required:表示该方法必须实现 |
|