首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果main( )创建一个NSAutoreleasePool并在退出前将其排空,这有关系吗?

问如果main( )创建一个NSAutoreleasePool并在退出前将其排空,这有关系吗?
EN

Stack Overflow用户
提问于 2012-05-14 04:05:36
回答 2查看 139关注 0票数 3

因为如果main()创建一个NSAutoreleasePool,并在程序退出之前将其排空,那么即使它可以防止内存泄漏,整个进程的内存空间也将在下一步被释放--如果我们接下来释放整个部分,那么释放小部分有关系吗?事实上,如果它继续在小块上工作,会不会导致程序退出速度变慢?

(drain可以调用release,后者又调用dealloc,但是如果dealloc只释放内存而不释放其他东西(比如关闭文件),那么drain将无助于释放内存)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-14 04:10:07

这被认为是一个好的实践,在可能的情况下自己清理干净,而不是依赖环境来为你做这件事。如果您所担心的只是内存使用,那么不,最上面的池并不是严格意义上必需的--但这并不是您唯一需要考虑的事情。对象可以在其-dealloc方法中执行释放内存以外的操作(例如,将文件刷新到磁盘,释放稀有的操作系统资源,或者释放在进程退出时不会返回给系统的资源)。

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

票数 5
EN

Stack Overflow用户

发布于 2012-05-14 04:15:58

在图形用户界面程序的程序终止期间,不调用dealloc。它被作为特例绕过,以避免减慢关机速度。这在你依赖于dealloc被调用的情况下是很重要的,因为不能保证它会被调用。

顶层的自动释放池在那里,这样系统就可以可靠地给你缺少自动释放池的线程的警告( Jonathan指出)。在GUI程序中,它永远不会真正耗尽。它会在命令行程序中耗尽,而且可能会减慢程序的完成速度,但这通常不是一个大问题。如果它在您的命令行应用程序中,您可以将exit()移到自动释放池排出之前。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10574801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档