You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何现代Xcode生成的项目将UIApplicationMain置于自动释放池外部?

Xcode main函数模板中UIApplicationMain移出自动释放池的原因

这个调整是苹果基于自动释放池最佳实践做的模板优化,核心逻辑和自动释放池的工作机制直接相关:

  • UIApplicationMain内部已自带自动释放池循环:UIApplicationMain会启动App的主RunLoop,而RunLoop在每一次循环迭代时,都会自动创建、使用并销毁自动释放池。App运行过程中产生的自动释放对象,会被RunLoop的池及时回收,不需要外层额外的池包裹整个UIApplicationMain调用。

  • 旧模板的冗余与内存隐患:如果把UIApplicationMain放在外层自动释放池里,这个池会一直存在到App退出(因为UIApplicationMain直到App终止才会返回),导致一些本该在RunLoop循环中被释放的对象,被延迟到App结束时才回收,无形中增加了内存占用。

  • 新模板的高效性:新模板只把初始化阶段的临时代码(比如获取AppDelegate类名的NSStringFromClass调用,会返回自动释放对象)放在临时自动释放池中,这些临时对象会在池结束时立即被释放,避免不必要的内存占用;而UIApplicationMain交给内部的RunLoop池去管理,更符合内存优化的最佳实践。

苹果在Xcode版本更新(约Xcode 10时期)调整了这个模板,虽然没有单独发布专门的变更说明,但在内存优化相关的WWDC Session以及Xcode的Release Notes中,都强调过缩小自动释放池作用范围的优化原则,这个模板改动正是对该原则的落地。

内容的提问来源于stack exchange,提问作者Aleksandr Medvedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:45:47