cocoa - 如果 main() 创建一个 NSAutoreleasePool 并在退出之前耗尽它,这有什么关系吗?

标签 cocoa memory-management nsautoreleasepool

因为如果main()创建了一个NSAutoreleasePool,并在程序退出之前耗尽它,那么即使它可以防止内存泄漏,整个进程的内存空间也会耗尽不管怎样,接下来要被释放——如果接下来整个部分被释放,我们释放小部分还有什么关系吗?事实上,如果它继续处理小块,是否会导致程序退出速度变慢?

(drain 可以调用 release,后者又调用 dealloc,但如果 dealloc 仅用于释放占用内存但不占用任何其他内容(例如关闭文件),那么 drain 将无助于释放内存)

最佳答案

尽可能自行清理,而不是依靠环境来为您清理,这被认为是一种良好的做法。如果您担心的只是内存使用情况,那么不,最顶层的池并不是绝对必要的——但这不是您需要考虑的唯一事情。对象可以在其 -dealloc 方法中执行除释放内存之外的其他操作(例如,将文件刷新到磁盘、释放稀有的操作系​​统资源,或者释放在进程退出时不会返回到系统的资源。)

更不用说当对象在没有池的情况下自动释放时控制台垃圾邮件。

关于cocoa - 如果 main() 创建一个 NSAutoreleasePool 并在退出之前耗尽它,这有什么关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574801/

相关文章:

javascript - 如何在 Swift 中从 npm 运行 Node JS 代码

objective-c - 在文本文件中写入 NSMutableArray

java - 从 Java 中的复杂对象中释放内存

objective-c - Objective-C 中的自动释放池 - 释放主自动释放池?

iphone - 运行循环结束——自动释放池恢复

cocoa - 可以使用不同的 bundle ID 启动同一 cocoa 应用程序的两个实例吗?

c - C 中的 for 循环中的变量 x 发生了什么?

memory-management - 已分配给定物理地址的进程的信息?

ios - 如何理解“当使用带有__weak限定词的变量时,该对象总是在autoreleasepool中注册”

macos - 如何在 ListView 中添加 subview ?