OBJECT-C 内存管理


当使用alloc、new方法或者通过copy消息(生成接收对象的一个副本)创建一个对象时,对象的保留计数器值被设置为1.要增加对象的保留计数器值,可以给对象发送一条retain消息。要减少对象的保留计数器值,可以给对象发送一条release消息。
-(void)dealloc;重写用来释放内存
NSObject 内存的几个方法
-(id)retain;对象保留计数器值加1
-(void)release;对象保留计数器值减1
-(unsigned)retain count;获取当前对象的保留计数器值
对象所有权:如果一个对象具有指向其他对象的实例变量,则称该对象拥有这些对象
-(id)autorelease;所有对象全部入池,该方法预先设定了一条在将来某个时间发送的release消息,其返回值是接收消息的对象,retain消息采用了相同的技术,使嵌套调用更加容易。当给一个对象发送autorelease消息时实际上是将该对象添加到NSAutoreleasePool中。当自动释放池销毁时,会向该池中的所有对象发送release消息
内存管理规则:
1、当你使用new、alloc或copy方法创建一个对象时,该对象的保留计数器值为1.当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象将在其使用寿命结束时被销毁。
2、当你通过任何其他方法获得一个对象时则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理,如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。
3、如果你保留了某个对象,你需要最终释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。
当希望在多个代码中一直拥有某个对象。常见的方法是:如果你正在使用new 、alloc或copy方法获得一个对象,则不需要执行任何其他操作,该对象的保留计数器值为1,因些它将一直被保留,只是一定要在拥有该对象的dealloc方法中释放该对象。
如果你使用除alloc、new 或copy以外的方法获得一个对象,你需要保留该对象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章