ReleaseDesignerOutlets释放了未重新分配的出口

时间:2012-09-12 10:15:27

标签: xamarin.ios

我有以下情况:

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

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

  3. 调用UIViewControllerA.DidReceiveMemoryWarning()以及UIViewControllerA.ViewDidUnload()。

  4. 在方法UIViewControllerA.ViewDidUnload()中,我按照建议调用ReleaseDesignerOutlets()。 UIViewControllerA设计器出口现已解除分配并且为空。

  5. 我点击了导航栏上的“后退”按钮,它取消了UIViewControllerB,并导致调用UIViewControllerA.ViewDidLoad()。

  6. 此时我希望设计器出口初始化但它们仍为空,并且我的应用程序因空指针异常而崩溃。

  7. 我是否从根本上错过了什么?我正在使用Monotouch 5.4.0。

    EDIT 我发现这个post描述了问题的解决方案与我发现的相同,即在ViewDidUnload()中释放设计器插座。

      

    更新:它终于崩溃了! (或者至少似乎是)

         

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

         

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

         

    情况不是这样吗? 我认为在ViewDidUnload事件中处理插座是一种好习惯吗?

         

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

         

    多么美好的一天!

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

0 个答案:

没有答案