什么时候应该使用Autorelease Pool
2017-06-29 16:28
211 查看
csdn首发:http://blog.csdn.net/guijiewan/article/details/46470285
Objective c使用ARC之后,一般都不需要再手动调用retain, release,但偶尔还能看到这样的代码块:
那么问题来了,什么时候需要使用@autoreleasepool{},什么时候不需要?
换句话说,autorelease objects 什么时候起作用?正确理解了这个本质问题,那么写代码的时候,什么时候该用,什么时候不需要用,就能做到心中有数。
需要显式使用@autoreleasepool{}一般有以下三种情况:
autorelease 机制基于 UI framework。因此写非UI framework的程序时,需要自己管理对象生存周期。
autorelease 触发时机发生在下一次runloop的时候。因此如何在一个大的循环里不断创建autorelease对象,那么这些对象在下一次runloop回来之前将没有机会被释放,可能会耗尽内存。这种情况下,可以在循环内部显式使用@autoreleasepool {}将autorelease 对象释放。
自己创建的线程。Cocoa的应用都会维护自己autoreleasepool。因此,代码里spawn的线程,需要显式添加autoreleasepool。注意:如果是使用POSIX API 创建线程,而不是NSThread,那么不能使用Cocoa,因为Cocoa只能在多线程(multithreading)状态下工作。但可以使用NSThread创建一个马上销毁的线程,使得Cocoa进入multithreading状态。
Objective c使用ARC之后,一般都不需要再手动调用retain, release,但偶尔还能看到这样的代码块:
@autoreleasepool { // code do something, creates some autoreleases objects }
那么问题来了,什么时候需要使用@autoreleasepool{},什么时候不需要?
换句话说,autorelease objects 什么时候起作用?正确理解了这个本质问题,那么写代码的时候,什么时候该用,什么时候不需要用,就能做到心中有数。
需要显式使用@autoreleasepool{}一般有以下三种情况:
autorelease 机制基于 UI framework。因此写非UI framework的程序时,需要自己管理对象生存周期。
autorelease 触发时机发生在下一次runloop的时候。因此如何在一个大的循环里不断创建autorelease对象,那么这些对象在下一次runloop回来之前将没有机会被释放,可能会耗尽内存。这种情况下,可以在循环内部显式使用@autoreleasepool {}将autorelease 对象释放。
for (item in BigSet){ @autoreleasepool { //create large mem objects } }
自己创建的线程。Cocoa的应用都会维护自己autoreleasepool。因此,代码里spawn的线程,需要显式添加autoreleasepool。注意:如果是使用POSIX API 创建线程,而不是NSThread,那么不能使用Cocoa,因为Cocoa只能在多线程(multithreading)状态下工作。但可以使用NSThread创建一个马上销毁的线程,使得Cocoa进入multithreading状态。
相关文章推荐
- 什么时候应该使用Autorelease Pool
- iOS开发-AutoreleasePool是什么时候销毁的?
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- Web Service学习笔记:什么时候应该使用Web Service
- 什么时候应该使用 工厂模式
- 什么时候应该使用OLE-DB,ADO 或ODBC
- 什么时候应该使用Web Service
- 什么时候应该使用Web Service
- 什么时候应该使用Web Service
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么时候应该使用Web Service? (我想问,如果在局域网里使用web service+windows程序来开发原来的C/S结构的程序,性能上差多少?)
- 什么时候应该使用Web Service
- 什么时候应该使用==?什么时候应该使用Equals?(如何判断值相等还是引用相等。)
- 什么时候应该使用Web Service
- 什么时候应该使用Web Service
- [转载] 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么时候应该使用Web Service
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么时候应该使用 ==?什么时候应该使用 Equals?