iOS基础知识

自动释放池的原理和本质

2021-02-23  本文已影响0人  富城

自动释放池的原理和本质

什么是 autoreleasepool?

答:autoreleasepoolOC 的内存自动管理机制,它可以通过把不需要立即释放的对象通过栈的形式放到自动释放池中,当代码执行到释放池作用域结束,将池中的对象统一发送 release 消息,当对象的引用计数为零时,对象就被释放,内存被系统回收.

autoreleasepool 的本质其实也是一个对象,

struct __AtAutoreleasePool {
    //构造函数
    __AtAutoreleasePool() {
        atautoreleasepoolobj = objc_autoreleasePoolPush();
    }
    //析构函数
    ~__AtAutoreleasePool() {
        objc_autoreleasePoolPop(atautoreleasepoolobj);
    }
    // 结构体定义的对象
    void * atautoreleasepoolobj;
};

@autoreleasepool {}
//等价于
{__AtAutoreleasePool __autoreleasepool; }

不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中创建)

上一篇 下一篇

猜你喜欢

热点阅读