黑马程序员技术交流社区

标题: 关于@autorelease学习小结 [打印本页]

作者: tz19900926    时间: 2015-9-25 21:18
标题: 关于@autorelease学习小结
本帖最后由 tz19900926 于 2015-9-25 21:19 编辑


@autoreleaspool的使用注意,
1、并不是所有放到自动释放池中的代码,产生的对象就会自动释放,如果需要释放,必须加入到自动释放池中
Person *p1 = [[Person new] autorelease];
2如果对象调用了autorelease 但是调用autorelease的时候,没有在任何一个自动释放池中,此时该对象也不会被加入到自动释放池
3、我们只需要在自动释放池代码中调用autorelease就可以把对象自动加入到自动释放池

autorelease嵌套
自动释放池是特殊的栈结构,和内存栈区不一样
对象存在位于栈顶位置的自动释放池中
Person * p = [Person new];
@autoreleasepool{
      @autoreleasepool{
              @autoreleasepool{           
                     [p autorelease];     
                  }
         }
}
autorelease建议不要存放会占很大空间的对象
不要把大量循环操作放在同一个池子里,这样会造成内存峰值上升

2autorelease错误用法
Person *p = [Person new];
@autoreleasepool{
           [p artorelease];  
}
[p release];

屏幕快照 2015-09-25 20.55.23.png (59.23 KB, 下载次数: 8)

屏幕快照 2015-09-25 20.55.23.png

作者: tz19900926    时间: 2015-9-25 21:20
图中1,2,3是自动释放池,最顶端的池子放对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2