【问题标题】:Does a UIView not require its UIViewController?UIView 不需要它的 UIViewController 吗?
【发布时间】:2012-09-21 04:04:17
【问题描述】:

在 Instruments 中玩耍时,我发现了一些我不明白的地方。我创建了几个UIViewControllers 并将他们的views 添加到另一个UIView

CustomVC *vc = [[CustomVC alloc] initWithCustomInitializer:someParameter];
[mainView addSubview:vc.view];

通过在 initdealloc 中记录 CustomVC 的内存地址,我看到 vc 几乎立即被释放,尽管视图仍然在屏幕上并且一切正常。

UIView 不一定需要它的控制器吗?还是发生了其他我误解的事情?

【问题讨论】:

    标签: ios cocoa-touch memory-management uiview uiviewcontroller


    【解决方案1】:

    UIView 不/不应该保留其父级(UIViewController),因此如果您放弃对 UIViewController 的引用而只保留对 UIView 的引用,则没有什么能保持强引用它,它将被释放。

    UIView 中对其控制器的弱引用将自动设置为 nil。

    UIView 是否需要它的“丢失”控制器来完成它的工作是另一回事,完全取决于UIView

    【讨论】:

      【解决方案2】:

      UIView 无论如何都不需要 ViewController。发生的事情是您可能没有保留指向 VC 的指针。指向视图的指针由 mainView 保留。 此外,无论您是否使用 ARC。如果要将对象保留在内存中,则需要对其具有强(ARC)或保留属性。不是为了让你感到困惑。它不一定需要是您的自定义子类。假设您正在使用 UINavigationController。例如,您可以在应用程序委托中创建一个控制器并将其推送到 UINavigation 控制器。只要有东西,您就不需要保留指向它的指针。这是非常根本的。您需要清楚内存管理我认为我无法在这里充分解释它。我强烈建议您查看有关 iOS 开发的斯坦福课程。 http://itun.es/ru/_zEGD

      【讨论】:

      • 整洁 - 谢谢。该视图只是短暂使用,所以我不需要它闲逛,只是好奇。
      • 我不能夸大清楚 VC 的东西和内存管理的重要性,这门课程在 itunesU 上是免费的,非常值得一看。这是 Paul hegarty 的想法(他在 NeXT 开发 Objective-C 时工作)
      【解决方案3】:

      一次应该只有一个 UIViewController。添加属于视图控制器的视图是不好的做法。

      为了回答您的问题,由于上述限制(或 Apple 的设计决定),该视图现在可能由另一个视图控制器保留,并从 vc 中释放。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        • 2011-06-17
        • 2015-09-06
        • 2011-08-22
        • 1970-01-01
        • 2010-11-12
        相关资源
        最近更新 更多