美文网首页iOS软件重构与设计模式APP & program简友广场
iOS知识复习笔记(6)--- 自动释放池Autorelease

iOS知识复习笔记(6)--- 自动释放池Autorelease

作者: 焦下客 | 来源:发表于2023-01-12 00:10 被阅读0次

    原理

    autoreleasePool 是OC中的内存自动回收机制,它可以延迟加入autoreleasepool中的变量release的时机,正常情况下,创建的变量会在超出作用域的时候release,但是如果变量加入autoreleasepool,那么release将会延迟执行。

    释放时机

    被autorelease修饰的对象,释放时机有两种:

    1. 如果通过代码添加一个autoreleasepool,在作用域结束时,随着pool的释放,就会释放pool中的对象。这种情况是及时释放的,并不依赖于runloop。

    2. 另一种就是系统自动进行释放,系统会在runloop开始的时候创建一个pool,进入休眠或者是退出的时候会对pool中的对象执行release操作。

    具体时间如图: runloop-autorelease.png

    数据结构

    autoreleasePoolPage是一个双向链表结构如下图: autoreleasePool.png

    当执行objc_autoreleasePoolpush() 会压入哨兵对象,当对象发送autorelease 到时候会压入需要释放的对象。当执行objc_autoreleasePoolpop() 会从栈顶开始释放对象,直到遇到第一个哨兵对象。

    autoreleasePool也是和线程一一对应。

    相关文章

      网友评论

        本文标题:iOS知识复习笔记(6)--- 自动释放池Autorelease

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