@autoreleasepool的用法

今天在一个技术交流群里面看到了释放池的使用场景。算是解除了我的困惑。
在for循环里,创建的临时变量并不会随着一次循环的完成而自动释放。
所以当你在循环里处理大文件时就会导致内存达到峰值。
具体用法

for (int i=0;i<100000;i++) {
        @autoreleasepool {
            UIImage *image = [UIImage imageNamed:@"pic"];
        }
    }

每一次循环结束,image这个临时变量就会销毁。
而不使用@autoreleasepool,则对象的销毁会在这个runloop结束之后。
苹果建议使用场景:
1、写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时。
2、写循环,循环里面包含了大量临时创建的对象。(本文的例子)
3、创建了新的线程。(非Cocoa程序创建线程时才需要)
4、长时间在后台运行的任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 907评论 0 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,239评论 30 472
  • 1.简介 应用程序的内存管理就是在程序的运行期开辟内存,使用内存,使用完毕后释放内存。一个好的程序使用尽可能少的内...
    BoomLee阅读 1,983评论 8 7
  • 不知道从什么时候开始,我的歌单早已经达到了4000多首...这还只是单单网易云平台的。作为一个单身程序猿,戴着耳机...
    温温温888阅读 1,632评论 0 5
  • 舍友总说我是应该写一些东西,我也觉得是,有些好的想法当下就想写出来,又觉得差点什么就不了了之了。然后无限叹惋,这种...
    嗯_说得好阅读 1,492评论 1 3