最近面试总会被问到自动释放池相关的问题,在回答完自动释放池的原理和内部的结构AutoreleasePoolPage后,面试官大多习惯性的会问一句。main函数中为什么用@autoreleasepool{}包着。
查阅网络上的相关资料,对这一块的解释也是十分有限。
经过对AutoreleasePoolPage的深入了解以及自动释放池和线程/RunLoop的相关了解。大致原因总结如下:
main函数中写的代码中可能产生 autorelease 对象,用 @autoreleasePool 包括之后,会将其中的 autoreleasePool drain 一次。
其他情况自动释放池都是由 runloop 调度的。而 runloop 在 UIApplicationMain 里面启用。那么之前的代码产生的 autorelease 的对象就没法释放了。
部分参考文献:
autoreleasePool详解_wtl1804的博客-CSDN博客_@autoreleasepool