什么时候应该使用Autorelease Pool

csdn首发:http://blog.csdn.net/guijiewan/article/details/46470285

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状态。

参考:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值