作者:琪琪 | 来源:互联网 | 2023-06-16 19:26
在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,
而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。
在嵌套的autoreleasePool中,只有最里层的pool使对象的引用计数加1。
反过来说就是最里层的pool会阻止外层的pool对对象的引用。
这样就可以解释为什么如果方法里面,如果有大循环的话,应该对循环加autoReleasePool,
因为这个pool阻止了RunLoop的一次迭代中加入的pool对对象的引用。
这样在一次循环结束后,在循环中创建的变量就会被释放。