因为如果main()创建一个NSAutoreleasePool,并在程序退出之前将其排空,那么即使它可以防止内存泄漏,整个进程的内存空间也将在下一步被释放--如果我们接下来释放整个部分,那么释放小部分有关系吗?事实上,如果它继续在小块上工作,会不会导致程序退出速度变慢?
(drain可以调用release,后者又调用dealloc,但是如果dealloc只释放内存而不释放其他东西(比如关闭文件),那么drain将无助于释放内存)
发布于 2012-05-14 04:10:07
这被认为是一个好的实践,在可能的情况下自己清理干净,而不是依赖环境来为你做这件事。如果您所担心的只是内存使用,那么不,最上面的池并不是严格意义上必需的--但这并不是您唯一需要考虑的事情。对象可以在其-dealloc方法中执行释放内存以外的操作(例如,将文件刷新到磁盘,释放稀有的操作系统资源,或者释放在进程退出时不会返回给系统的资源)。
更不用说当对象在没有池的情况下自动释放时的控制台垃圾邮件。
发布于 2012-05-14 04:15:58
在图形用户界面程序的程序终止期间,不调用dealloc。它被作为特例绕过,以避免减慢关机速度。这在你依赖于dealloc被调用的情况下是很重要的,因为不能保证它会被调用。
顶层的自动释放池在那里,这样系统就可以可靠地给你缺少自动释放池的线程的警告( Jonathan指出)。在GUI程序中,它永远不会真正耗尽。它会在命令行程序中耗尽,而且可能会减慢程序的完成速度,但这通常不是一个大问题。如果它在您的命令行应用程序中,您可以将exit()移到自动释放池排出之前。
https://stackoverflow.com/questions/10574801
复制相似问题