UIView不需要它的UIViewController吗?

时间:2012-09-29 15:40:17

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

在乐器中玩耍,我发现了一些我不理解的东西。我创建了几个UIViewController并将view添加到另一个UIView

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

通过在initdealloc中记录CustomVC的内存地址,我发现vc几乎立即被释放,尽管视图仍在屏幕上,一切正常。< / p>

UIView不一定需要它的控制器吗?或者其他事情正在发生,我误解了?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

UIView不会/不应该保留其父级(UIViewController),因此如果您放弃对UIViewController的引用,只保留对{UIView的引用1}},没有什么可以强烈引用它,它将被释放。

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

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

答案 2 :(得分:0)

一次只能有一个UIViewController。添加属于viewcontroller的视图是不好的做法。

要回答您的问题,由于上述约束(或Apple的设计决定),视图现在可能由其他视图控制器保留,并从vc中释放。