美文网首页
autoreleasepool原理

autoreleasepool原理

作者: lllaa | 来源:发表于2018-11-26 22:19 被阅读9次

延迟release操作,加入到栈顶

什么时候释放

手动添加的,是在当前作用域大括号结束时释放

非手动添加的,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop

原理

参考:

黑幕背后的Autorelease

AutoreleasePool并没有单独的结构,而是由若干个AutoreleasePoolPage以双向链表的形式组合而成(分别对应结构中的parent指针和child指针)

使用@autoreleasepool{}来使用一个AutoreleasePool,随后编译器将其改写成下面的样子:

void *context = objc_autoreleasePoolPush();

objc_autoreleasePoolPop(context);

而这两个函数都是对AutoreleasePoolPage的简单封装,所以自动释放机制的核心就在于这个类。

AutoreleasePoolPage是一个C++实现的类

向一个对象发送- autorelease消息,就是将这个对象加入到当前AutoreleasePoolPage的栈顶next指针指向的位置

相关文章

网友评论

      本文标题:autoreleasepool原理

      本文链接:https://www.haomeiwen.com/subject/dsqyqqtx.html