objective-c - 自动引用计数和 UINavigationController

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

我在使用 UINavigationController 和 ARC(自动引用计数)时遇到了一个非常奇怪的问题。 我有一个带有 UIViewController 的 iPad 应用程序,其中包含一个带有一些 subview 的 View 。 它的 View 中有一个 UIScrollView(至少有 5 个 subview )和 2 个简单 View ,一个黑条和一个白条。

每当我在 UINavigationController 堆栈上推送某些东西时,比方说一个 WebView,并且我收到内存警告,UINavigationController 会在它堆栈上的所有当前和以前的 UIViewController 上调用 ViewDidLoad。

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

我怀疑自从启用了 ARC 后,-didReceiveMemoryWarning 方法会在幕后释放一些东西。我如何才能强制 ARC 保留这个特定的 ViewController?

有人可以帮我解决这个问题吗?因为此时此刻我真的很烦。

非常感谢!

-B

最佳答案

看起来您在 Web View 中加载的内容非常繁重,导致出现内存警告(或者您正在执行其他导致内存不足的情况)。 UINavigationController 接收到 -didReceiveMemoryWarning 并将它转发给所有卸载 View 的 View Controller (-> viewDidUnload 告诉你释放你不想留在内存中的东西。ARC 确实不包括这个所以你必须消除所有与 View 相关的东西)。 当您返回时,将调用 loadViewviewDidLoad。您可能没有完全恢复您的 View - 特别是您的 ScrollView - 以匹配它们在内存警告之前所处的状态。
请记住,在 iOS 5 中,内存警告出现的频率低于以前的 iOS 版本(操作系统会尝试为您释放尽可能多的内存),但是当您收到内存警告时,这是您存活的最后机会。

关于objective-c - 自动引用计数和 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076547/

相关文章:

objective-c - UILabel分配持久化占用8Mb内存

ios - 如何在 Objective-C 的 NSUserDefaults 中存储我的客户 NSMutableArray?

ios - 如何检测 View 中的某些部分

iOS Core Data - 将相关数据添加到实体

uinavigationcontroller - 这个导航控件是如何创建的

ios - 导航左标签栏项目

ios - 标签栏按钮在 iOS 中总是显示蓝色?

ios - NS_ENUM 作为协议(protocol)中的属性

ios - 将 30 秒添加到 NSDate

ios - 更改窗口 rootViewController 后出现 UITabBarController