最近面试总会被问到自动释放池相关的问题,在回答完自动释放池的原理和内部的结构AutoreleasePoolPage后,面试官大多习惯性的会问一句。main函数中为什么用@autoreleasepool{}包着。
查阅网络上的相关资料,对这一块的解释也是十分有限。
经过对AutoreleasePoolPage的深入了解以及自动释放池和线程/RunLoop的相关了解。大致原因总结如下:
main函数中写的代码中可能产生 autorelease 对象,用 @autoreleasePool 包括之后,会将其中的 autoreleasePool drain 一次。
其他情况自动释放池都是由 runloop 调度的。而 runloop 在 UIApplicationMain 里面启用。那么之前的代码产生的 autorelease 的对象就没法释放了。
部分参考文献:
autoreleasePool详解_wtl1804的博客-优快云博客_@autoreleasepool
本文探讨了Objective-C中自动释放池的工作原理,特别是在main函数中的使用。在main函数中使用@autoreleasepool可以确保在代码执行过程中产生的autorelease对象得到及时释放,因为这些对象在runloop启动前无法被正常处理。通过理解AutoreleasePoolPage和线程/RunLoop的关系,可以更好地掌握自动释放池的运行机制。
848

被折叠的 条评论
为什么被折叠?



