1

我有以下情况:

  1. UIViewControllerA 通过故事板 segue 将 UIViewControllerB 推送到导航堆栈;

  2. UIViewControllerB 现在在屏幕上,我通过 iOS 模拟器模拟内存警告。

  3. UIViewControllerA.DidReceiveMemoryWarning() 和 UIViewControllerA.ViewDidUnload() 一样被调用。

  4. 在 UIViewControllerA.ViewDidUnload() 方法中,我按照建议调用 ReleaseDesignerOutlets()。UIViewControllerA 设计器出口现在被释放并为空。

  5. 我点击导航栏上的“返回”按钮,该按钮关闭 UIViewControllerB 并导致 UIViewControllerA.ViewDidLoad() 被调用。

  6. 在这一点上,我希望设计器出口被初始化,但它们仍然为空,并且我的应用程序由于空指针异常而崩溃。

我从根本上错过了什么吗?我正在使用 Monotouch 5.4.0。

编辑我发现这篇描述问题解决方案的帖子与我发现的相同,也就是说,不要在 ViewDidUnload() 中发布设计器出口。

更新:终于没有崩溃了!(或者至少看起来是)

为了将来参考,看起来大锁定是由于我在 ViewDidUnload 事件中处理了我的 UIWebView 插座。UIWebView 是在 xib 中定义的,而不是在代码中添加为子视图。

当内存不足时,视图卸载并删除了 UIWebView 插座。随后,随着应用程序恢复(!?),ViewDidLoad 事件将再次触发,但它会锁定。我希望在重新加载视图(即重新加载 xib)时恢复 UIWebView。

不是这样吗?我认为在 ViewDidUnload 事件中处理网点是一种好习惯吗?

我一注释掉“webView.Dispose(); webView = null;” 代码行,它一直在按预期工作。

多么美好的一天!

编辑 进一步调试显示,一些设计器出口正在重新分配,例如 UIImageView 和 UIScrollView,而其他诸如 UITextField 和 UIBarButtonItem 则没有。

4

0 回答 0