内容简介:原本打算将AutoreleasePool和内存管理,Runloop,线程,事件分发放在一块介绍的,因为这些都有着密切的联系,但是考虑到这样的话文章会很长,看得都累,所以还是分开了。看过iOS内存管理的都知道,iOS内存管理使用的引用计数会在不使用某个对象的时候调用release 方法,将某个对象的引用计数减1,当某个对象当引用计数减到0的时候对象被释放,dealloc被调用。但是某些情况需要延迟释放,最常见的例子比如当你在一个方法中返回一个对象时就需要延迟释放,AutoreleasePool是一种内存自动回
原本打算将AutoreleasePool和内存管理,Runloop,线程,事件分发放在一块介绍的,因为这些都有着密切的联系,但是考虑到这样的话文章会很长,看得都累,所以还是分开了。
1. AutoReleasePool 是什么
看过iOS内存管理的都知道,iOS内存管理使用的引用计数会在不使用某个对象的时候调用release 方法,将某个对象的引用计数减1,当某个对象当引用计数减到0的时候对象被释放,dealloc被调用。但是某些情况需要延迟释放,最常见的例子比如当你在一个方法中返回一个对象时就需要延迟释放,AutoreleasePool是一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。具体这些对象什么时候释放,在后续的介绍中将会介绍。这部分只要知道AutoReleasePool 是什么就可以了:
AutoreleasePool是一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机
2.从宏观看AutoReleasePool位于哪个位置
终于可以上图了:
在一个应用中有两种释放池局部释放池和RunLoop释放池,上图中展示的是RunLoop释放池,局部释放池比较简单,就是在autoreleasepool花括号结束的时候释放释放池里面的对象的,所以这里最关键的就是RunLoop释放池
@autoreleasepool {
}
RunLoop释放池会在进入主线程Runloop的时候新建一个Autoreleasepool,在从睡眠被唤醒的时候,通过pop后再push清空并重建一个Autoreleasepool,在退出RunLoop的时候pop掉Autoreleasepool
3. AutoRelease的内部结构与机制
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
技术之瞳——阿里巴巴技术笔试心得
阿里巴巴集团校园招聘笔试项目组 / 电子工业出版社 / 2016-11 / 69
《技术之瞳——阿里巴巴技术笔试心得》由阿里巴巴集团校园招聘笔试项目组所著,收集了阿里历年校招中的精华笔试题,涉 及多个领域。《技术之瞳——阿里巴巴技术笔试心得》中内容大量结合了阿里巴巴的实际工作场景,以例题、解析、习题的形式,引 导读者深入理解技术上的关键点、紧要处,夯实基础,启发思考。《技术之瞳——阿里巴巴技术笔试心得》内容不仅专业、有趣,更 是将理论知识与实践应用结合起来,以场景化的问答娓娓道......一起来看看 《技术之瞳——阿里巴巴技术笔试心得》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
XML 在线格式化
在线 XML 格式化压缩工具