首页 > 学院 > 开发设计 > 正文

【读书笔记】iOS-内存管理

2019-11-14 18:20:08
字体:
来源:转载
供稿:网友

Cocoa的内存管理:retain,release和autorelease.

每个对象都维护一个保留计数器。对象被创建时,其保留计数器值为1;对象被保留时,保留计数器值加1;对象被释放时,保留计数器值减1;当保留计数器值归0时,对象被销毁。在销毁对象时,首先调用对象的dealloc方法,然后回收其占用的内存以供其他对象使用。

当对象接收到一条autorelease消息时,其保留计数器值并不立马改变。相反,该对象只是被放入NSAutoreleasePool中。当自动释放池被销毁时,会身池中的所有对象发送release消息。所有被自动释放的对象都将其保留计数器值减1.如果保留计数器值归0,则对象被销毁。当使用AppKit时,Objective-C会在适当的时间为你创建和销毁自动释放池,例如在当前用户事件处理完毕时。除此以外,你要负责创建自己的自动释放池,Foundation库工具的模板包含了这些代码。

 

Cocoa中关于对象及其保留计数器的3条规则。

1,如果使用new,alloc或copy操作获得一个对象,则该对象的保留计数器值为1.

2,如果通过任何其它方法获得一个对象,则假设该对象的保留计数器值为1,而且已经被设置为自动释放。

3,如果保留了某个对象,则必须保持retain方法和release方法的使用次数相等。

 

参考资料:《Object-C基础教程》

 

 
 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表