1

在 Instruments 中玩耍时,我注意到了一些我不明白的东西。我创建了几个UIViewControllers 并将它们view的 s 添加到另一个UIView

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

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

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

4

3 回答 3

1

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

于 2012-09-29T15:44:13.260 回答
1

AUIView不/不应该保留其父级 (the UIViewController),因此如果您放弃对 theUIViewController的引用而只保留对 the 的引用,则UIView不会保留对它的强引用,它将被释放。

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

不过,是否UIView需要其“丢失”的控制器来完成其工作是另一回事,并且完全取决于UIView.

于 2012-09-29T15:46:52.993 回答
0

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

要回答您的问题,由于上述约束(或 Apple 的设计决定),该视图现在可能由另一个视图控制器保留,并从 vc.

于 2012-09-29T15:58:05.197 回答