因为如果main()
创建了一个NSAutoreleasePool
,并在程序退出之前耗尽它,那么即使它可以防止内存泄漏,整个进程的内存空间也会耗尽不管怎样,接下来要被释放——如果接下来整个部分被释放,我们释放小部分还有什么关系吗?事实上,如果它继续处理小块,是否会导致程序退出速度变慢?
(drain
可以调用 release
,后者又调用 dealloc
,但如果 dealloc
仅用于释放占用内存但不占用任何其他内容(例如关闭文件),那么 drain
将无助于释放内存)
最佳答案
尽可能自行清理,而不是依靠环境来为您清理,这被认为是一种良好的做法。如果您担心的只是内存使用情况,那么不,最顶层的池并不是绝对必要的——但这不是您需要考虑的唯一事情。对象可以在其 -dealloc
方法中执行除释放内存之外的其他操作(例如,将文件刷新到磁盘、释放稀有的操作系统资源,或者释放在进程退出时不会返回到系统的资源。)
更不用说当对象在没有池的情况下自动释放时控制台垃圾邮件。
关于cocoa - 如果 main() 创建一个 NSAutoreleasePool 并在退出之前耗尽它,这有什么关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574801/