非ARC模式下内存管理总结
来源:互联网 发布:被广电禁播的网络剧 编辑:程序博客网 时间:2024/06/03 13:42
如果我们不使用ARC来自动管理内存,那么则应该记住以下准则:
1.对于临时对象:
2.对于你打算长期拥有的对象,例如你希望其他的实例对象可以访问这个对象:a.通过alloc/new/copy获得的对象,应该在不再使用时释放该对象(release);
b.通过其他任何方法获得的对象,我们假设该对象的retainCount为1,且被设置为自动释放对象,因此我们不需要做任何事情;
a.通过alloc/new/copy获得的对象,应该在dealloc方法中释放该对象;
b.通过其他任何方法获得的对象,因为我们假设该对象的retainCount为1,且被设置为自动释放对象,现在你希望长期拥有这个对象,因此我们需要保留他(retain),同时在不再使用他的时候,在dealloc方法中释放这个对象,我们应该保证retain和release方法的使用次数是相等的;
另外,不管一个对象的retainCount是多少,比如一个NSString对象str的retainCount为2,如果执行str = nil; 那么str的retainCount都会被置为0,具体原因在这里。
因此,判断一个对象应该如何实现内存管理时,我们可以先看这个对象是怎么得到的,然后考虑我们是临时使用它还是想长期保留它,依次做出决策。
另外,自动释放池NSAutoreleasePool是以栈的形式实现的,因此当你创建一个自动释放池并加入一个希望自动释放的对象以后,再新建一个自动释放池,随后release这个自动释放池,之前创建的对象并不会被释放,因为存放他的那个自动释放池还是存在的。
实际上,在编写iPhone程序时,苹果公司建议你不要在自己的代码中使用autorelease方法,同时还要避免使用创建自动释放池对象的便利函数。
- 非ARC模式下内存管理总结
- 内存管理总结-ARC和非ARC
- ARC下内存管理
- ios中ARC模式下的内存管理
- arc模式的内存管理
- arc模式的内存管理
- ARC内存管理原则总结
- iOS ARC内存管理总结
- IOS ARC内存管理总结
- ARC下内存管理整理
- 内存管理 ARC情况下
- ARC下内存管理问题
- ios arc下内存管理
- ARC下的内存管理
- ARC下的内存管理
- ARC下的内存管理
- iOS非ARC内存管理摘要
- iOS非ARC内存管理摘要
- postgres 备库遇到 FATAL: the database system is starting up问题
- Activity的启动流程
- 做市场的人,不一定知道什么才是“市场”
- curl
- 使用 Apache CXF 实现 Web Service 详解
- 非ARC模式下内存管理总结
- 用户管理系统——多条件搜索
- mysql 导入数据 Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
- 一个奇怪的子线程更新UI问题
- 网页生成qrcode二维码,及二维码信息加载
- js 和 java 作用域的区别
- PHP操作mysql类的封装
- 妙用Javascript运算符“||”和“&&”
- 分享一个链接