自动释放池-AutoReleasePool

2021-04-12  本文已影响0人  佛祖ohmygod

自动释放池-AutoReleasePool

自动释放池是OC中的一种内存自动回收机制,它可以将加入AutoreleasePool中的变量release的时机延迟,简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到runloop休眠/超出autoreleasepool作用域{}之后才会被释放


image.jpeg

1、从程序启动到加载完成,主线程对应的runloop会处于休眠状态,等待用户交互来唤醒runloop
2、用户的每一次交互都会启动一次runloop,用于处理用户的所有点击、触摸事件等
3、runloop在监听到交互事件后,就会创建自动释放池,并将所有延迟释放的对象添加到自动释放池中
4、在一次完整的runloop结束之前,会向自动释放池中所有对象发送release消息,然后销毁自动释放池
总结

对于自动释放池,我们主要关心的点有以下三点:
1、自动释放池什么时候创建?
2、对象是如何加入自动释放池的?
3、哪些对象才会加入自动释放池?

image.jpeg


objc_autoreleasePoolPush 源码分析

1、创建页 autoreleaseNewPage

2、压栈对象 autoreleaseFast

objc_autoreleasePoolPop 源码分析
进入pop源码实现,主要由以下几步

image.jpeg

总结

相关面试题

AutoreleasePool 相关
面试题1:临时变量什么时候释放?

上一篇 下一篇

猜你喜欢

热点阅读