【发布时间】:2012-08-31 16:05:29
【问题描述】:
在Apple documentation 中,它说:
AppKit 和 UIKit 框架处理每个事件循环迭代 (例如鼠标按下事件或点击)在自动释放池中 堵塞。因此,您通常不必创建自动释放 池块自己,甚至查看用于创建一个的代码。
现在,这应该是显而易见的,但无论如何我都会要求确认。
如果我正在开发最终将成为后台进程的内容(通过 Grand Central Dispatch),但为简单起见,我首先将其放在第一个加载视图的 viewDidLoad 中,这样我的视图实际上不会显示在屏幕直到所有(比如说)2分钟的处理完成,然后在这两分钟内所有默认的自动释放池永远不会被释放,因为它还没有经过事件循环迭代,对吧?听到拒绝简直是疯了,但我陷入了这个日益严重的记忆问题,所以我会要求确认并希望有一个好消息。
如果是这样,我应该放置我自己的自动释放块。如果处理是通过 GCD 在后台进程中完成的,我仍然需要自动释放块,对吗?
【问题讨论】:
-
我假设你没有使用 ARC 对吧?
-
至少在 Xcode 3 下,如果您在模拟器中运行您的应用程序并创建了一个自动释放对象,其中“堆栈”中没有自动释放池,模拟器将在控制台中打印出警告大致如下:“没有定义自动释放池——只是泄漏了对象 xxx。”缩小这些来源的范围可能很麻烦,但这是一个非常有用的信息,可以确保您没有得到。
标签: objective-c ios autorelease