iOS main函数为什么要包着@autoreleasepool?

最近面试总会被问到自动释放池相关的问题,在回答完自动释放池的原理和内部的结构AutoreleasePoolPage后,面试官大多习惯性的会问一句。main函数中为什么用@autoreleasepool{}包着。

查阅网络上的相关资料,对这一块的解释也是十分有限。

经过对AutoreleasePoolPage的深入了解以及自动释放池和线程/RunLoop的相关了解。大致原因总结如下:

        main函数中写的代码中可能产生 autorelease 对象,用 @autoreleasePool 包括之后,会将其中的 autoreleasePool drain 一次。

        其他情况自动释放池都是由 runloop 调度的。而 runloop 在 UIApplicationMain 里面启用。那么之前的代码产生的 autorelease 的对象就没法释放了。

部分参考文献:

autoreleasePool详解_wtl1804的博客-CSDN博客_@autoreleasepool

autoreleasepool详解_lixuezhi-CSDN博客_@autoreleasepool

详解autoreleasepool - CocoaChina_一站式开发者成长社区

猜你喜欢

转载自blog.csdn.net/wang_gwei/article/details/121291432
今日推荐