原本打算将AutoreleasePool和内存管理,Runloop,线程,事件分发放在一块介绍的,因为这些都有着密切的联系,但是考虑到这样的话文章会很长,看得都累,所以还是分开了。
看过iOS内存管理的都知道,iOS内存管理使用的引用计数会在不使用某个对象的时候调用release 方法,将某个对象的引用计数减1,当某个对象当引用计数减到0的时候对象被释放,dealloc被调用。但是某些情况需要延迟释放,最常见的例子比如当你在一个方法中返回一个对象时就需要延迟释放,AutoreleasePool是一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。具体这些对象什么时候释放,在后续的介绍中将会介绍。这部分只要知道AutoReleasePool 是什么就可以了:
AutoreleasePool是一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机
终于可以上图了:
在一个应用中有两种释放池局部释放池和RunLoop释放池,上图中展示的是RunLoop释放池,局部释放池比较简单,就是在autoreleasepool花括号结束的时候释放释放池里面的对象的,所以这里最关键的就是RunLoop释放池
@autoreleasepool { }
RunLoop释放池会在进入主线程Runloop的时候新建一个Autoreleasepool,在从睡眠被唤醒的时候,通过pop后再push清空并重建一个Autoreleasepool,在退出RunLoop的时候pop掉Autoreleasepool
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们