【读书笔记】iOS-内存管理
2015-09-14 20:32
323 查看
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基础教程》
每个对象都维护一个保留计数器。对象被创建时,其保留计数器值为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基础教程》
相关文章推荐
- iOS设计模式 - 生成器
- IOS 学习---通过block自定义button的点击事件
- iOS计算缓存大小、清除缓存
- iOS远程推送(.p12转.pem方法)
- ios开发系列之枚举类型的使用
- iOS 页面显示在键盘之上
- 第三方登录
- iOS触摸事件总结
- IOS开发中的kvo以及kvc的理解
- ios推送
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- ios开发日记- 5 屏幕截图
- IOS从视频中获取截图
- iOS开发:利用SDWebImage实现图片加载与缓存
- iOS cocoapods
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- (转)27个提升效率的iOS开源库推荐
- IOS开发模块总结(二)后台运行程序(1) 后台运行程序详解(二)
- iOS 计算年龄
- IOS开发模块总结(二)后台运行程序(1) 后台运行程序详解(一)