自动引用计数和UINavigationController

时间:2011-11-10 08:14:51

标签: objective-c ios uinavigationcontroller automatic-ref-counting

UINavigationController与ARC(自动引用计数)相结合,我遇到了一个非常奇怪的问题。 我有一个带有UIViewController的iPad应用程序,其中包含带有一些子视图的视图。 它的视图中有一个UIScrollView(至少有5个子视图),还有2个简单视图,一个黑条和一个白条。

每当我在UINavigationController堆栈上推送一些东西时,让我们说一个WebView,并且我得到一个内存警告,UINavigationController在所有当前和之前的UIViewControllers上调用ViewDidLoad。

现在出现了问题,当我从堆栈中弹出WebView,然后我返回带有scrollview的UIViewController时,它就消失了! 它完全消失了。

我怀疑-didReceiveMemoryWarning方法在启用ARC之后会解决一些问题。如何强制ARC继续保持这个特定的ViewController?

有人可以帮我这个吗?因为在这个时刻我真的很讨厌。

非常感谢!

-B

1 个答案:

答案 0 :(得分:3)

看起来你在web视图中加载了一些非常重的东西,导致内存警告(或者你正在做其他导致内存不足的事情)。 UINavigationController接收-didReceiveMemoryWarning并将其转发给卸载其视图的所有视图控制器( - > viewDidUnload告诉您释放您不想留在内存中的内容.ARC不会涵盖这一点,所以你有把所有与视图相关的东西都弄清楚。 当您返回时,会调用loadViewviewDidLoad。您可能无法完全恢复视图(尤其是滚动视图)以匹配内存警告之前的状态。
请记住,在iOS 5中,内存警告的发生频率低于之前的iOS版本(操作系统会尝试为您释放尽可能多的内存)但是当您收到内存警告时,这是您保持活力的最后机会。