Objective-C内存管理学习之autorelease
2016-05-27 10:11
465 查看
调用autorelease方法,可以使取得的对象存在,但自己不持有对象。autorelease提供这样的功能,使对象在超出指定的生成范围时能够自动并正确地释放(调用release方法)。
autorelease的具体使用方法如下:
生成并持有NSAutoreleasePool对象;
调用已分配对象的autorelease实例方法;
废弃NSAutoreleasePool对象。(自动调用release)
注意:在大量产生autorelease的对象时,只要不废弃NSAutoreleasePool对象,那么生成的对象就不能被释放,隐藏会产生内存不足的现象。典型的例子是读入大量图像的同时改变其尺寸。图像文件读入NSData对象,并从中生成UIImage对象,改变该对象尺寸后生成新的UIImage对象。这种情况下,就会大量产生autorelease的对象。
在此情况下,有必要在适当的地方生成、持有或废弃NSAutoreleasePool对象。
提问:如果autorelease NSAutoreleasePool对象会如何?
回答:发生异常
通常在使用Objective-C,也就是Foundation框架时,无论调用哪一个对象的autorelease实例方法,实现上是调用的都是NSObject类的autorelease实例方法。但是对于NSAutoreleasePool类,autorelease实例方法已被该类重载,因此运行时就会出错。
autorelease的具体使用方法如下:
生成并持有NSAutoreleasePool对象;
调用已分配对象的autorelease实例方法;
废弃NSAutoreleasePool对象。(自动调用release)
注意:在大量产生autorelease的对象时,只要不废弃NSAutoreleasePool对象,那么生成的对象就不能被释放,隐藏会产生内存不足的现象。典型的例子是读入大量图像的同时改变其尺寸。图像文件读入NSData对象,并从中生成UIImage对象,改变该对象尺寸后生成新的UIImage对象。这种情况下,就会大量产生autorelease的对象。
在此情况下,有必要在适当的地方生成、持有或废弃NSAutoreleasePool对象。
提问:如果autorelease NSAutoreleasePool对象会如何?
回答:发生异常
通常在使用Objective-C,也就是Foundation框架时,无论调用哪一个对象的autorelease实例方法,实现上是调用的都是NSObject类的autorelease实例方法。但是对于NSAutoreleasePool类,autorelease实例方法已被该类重载,因此运行时就会出错。
相关文章推荐
- java HashMap 转Object对象 工具类
- Objective-C内存管理学习之ARC
- java入门教程-9.2Java Object类
- Mac应用点击关闭按钮就退出程序的方法(等同Command + Q)
- Mac开发 浏览器中打开一个URL连接地址
- java object类的方法
- coredata、sqlite、fmdb和sqlitepersistentobject
- javascript的 Object 和 Function
- SurfaceComposerClient object 问题
- kobject
- 【跟着子迟品 underscore】Object Functions 相关源码拾遗 & 小结
- 操作对象的流ObjectOutputStream,ObjectInputStream、随机读取流RandomAccessFile
- C#中object sender和 eventarge e变量
- Objective-C ---NSFileManager NSFileHandle (梳理整理)
- Json转换成bean-Jackson ObjectMapper
- iOS开发笔记 之 第1章 Objective-C语法学习
- Objective-C动画学习之自定义过渡动画的实现和使用
- Objective-C Runtime
- OC(Objective-C)学习笔记(二)--终端运行多OC程序
- Objective-C-UI控件学习之UIScreenEdgePanGestureRecognizer