gpt4 book ai didi

xamarin.ios - 为什么我必须保留对我的 UIViewController 的引用以防止它被垃圾收集?

转载 作者:行者123 更新时间:2023-12-04 06:29:14 29 4
gpt4 key购买 nike

这个问题的标题可能听起来很愚蠢,但我一直想知道以下问题:

  • 添加 UIView到应用程序的窗口。它不会旋转,因为没有实现 ShouldAutoRotateToInterfaceOrientation 的 Controller (): window.AddSubView(myView) ;
  • 现在取一个 UIViewController,它在 LoadView() 中创建它的 View 。覆盖 ShouldAutoRotateToInterfaceOrientation() .然后执行此操作:window.AddSubView(myController.View);

  • 在后一种情况下, View 按预期旋转。为什么?因为它的 View Controller 告诉它这样做。 但是 View 如何知道它属于哪个 Controller 呢?我没有告诉它! 从 ObjC 的人那里我了解到,每个 View 都有一个“_ viewDelegate”属性,它引用了 View 的 Controller 。
    但如果这是真的,为什么我必须保留 myController 的引用,最好在成员变量中,以防止它被垃圾收集?我在 AppDelegate.cs 中的测试用例:
    public static AddView()
    {
    var myController = new MyController();
    window.AddSubView(myController.View);
    }

    View 第一次是正确的,然后 Controller 似乎消失了。但是,下面的代码按预期工作:
    var myController = null;
    public static AddView()
    {
    this.myController = new MyController();
    window.AddSubView(myController.View);
    }

    最佳答案

    Monotouch 建立在 iOS 框架之上,其核心是使用引用计数作为其内存管理。即使添加了垃圾回收,它也不会影响底层框架。在 UIView 的情况下,它确实拥有对其 UIViewController 的引用,并且您的 Controller 被垃圾收集的原因是因为 iOS 中的所有委托(delegate)都已分配而不是保留。 Apples 内存管理指南在“对象的弱引用”下更详细地解释了这一点:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB

    希望这可以帮助。

    关于xamarin.ios - 为什么我必须保留对我的 UIViewController 的引用以防止它被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641758/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com