如果main()创建一个NSAutoreleasePool并在退出之前将其排干,这是否重要?

Sar*_*h W 3 cocoa memory-management nsautoreleasepool

因为如果main()创建一个NSAutoreleasePool,并在程序退出之前将其排出,那么即使它可以防止内存泄漏,整个过程的内存空间也会随后被释放 - 如果整个部分我们释放一些小块是否重要下一个被释放?事实上,如果它继续处理小块,它不会导致程序退出更慢?

(drain可以调用release,反过来调用dealloc,但如果dealloc只是为了释放内存而不是其他任何东西(比如关闭文件),那么drain将无助于释放内存)

Jon*_*pan 5

在可能的情况下尽量清理自己,而不是依靠环境为您完成清理,这被认为是一种很好的做法.如果你担心的只是内存使用,那么不,最重要的池并不是绝对必要的 - 但这不是你需要考虑的唯一事情.对象可以在其-dealloc方法中执行除可用内存之外的操作(例如,将文件刷新到磁盘,释放罕见的OS资源,或释放在进程退出时未以其他方式返回到系统的资源.)

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

  • 没有承诺`dealloc`将在应用程序终止时运行(通常不会).承诺将运行`applicationWillTerminate:`,以及将发布等效通知. (3认同)