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

本文探讨了Objective-C中自动释放池的工作原理,特别是在main函数中的使用。在main函数中使用@autoreleasepool可以确保在代码执行过程中产生的autorelease对象得到及时释放,因为这些对象在runloop启动前无法被正常处理。通过理解AutoreleasePoolPage和线程/RunLoop的关系,可以更好地掌握自动释放池的运行机制。
摘要由CSDN通过智能技术生成

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

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

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

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

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

部分参考文献:

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

autoreleasepool详解_lixuezhi-CSDN博客_@autoreleasepool

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值