【发布时间】:2011-11-10 08:14:50
【问题描述】:
UINavigationController 与 ARC(自动引用计数)结合使用时遇到了一个非常奇怪的问题。 我有一个带有 UIViewController 的 iPad 应用程序,其中包含一个带有一些子视图的视图。 它的视图中有一个 UIScrollView(至少有 5 个子视图)和 2 个简单视图,一个黑条和一个白条。
每当我在 UINavigationController 堆栈(假设是 WebView)上推送某些内容时,当我收到内存警告时,UINavigationController 会在其堆栈上的所有当前和以前的 UIViewController 上调用 ViewDidLoad。
现在问题来了,当我从堆栈中弹出 WebView 并返回带有滚动视图的 UIViewController 时,它就消失了! 完全没电了。
我怀疑 -didReceiveMemoryWarning 方法在启用 ARC 后会在后台释放一些东西。如何强制 ARC 保持对这个特定的 ViewController 的控制?
有人可以帮我解决这个问题吗?因为此刻真的很烦我。
非常感谢!
-B
【问题讨论】:
-
你是如何创建滚动视图的内容的?当您加载诸如 Web 视图之类的内容时,它们被删除是完全正常的,并且根据它们的创建方式,当您返回视图时,它们可能不会自动重新创建。这与 ARC 没有任何关系,它只是内存管理在 iOS 上的工作方式(如果发生内存不足警告并且您没有释放一些内存,您的应用程序将会崩溃)。您可以使用 iOS 模拟器中的“硬件 -> 模拟内存警告”对其进行测试。
标签: objective-c ios uinavigationcontroller automatic-ref-counting