在乐器中玩耍,我发现了一些我不理解的东西。我创建了几个UIViewController
并将view
添加到另一个UIView
:
CustomVC *vc = [[CustomVC alloc] initWithCustomInitializer:someParameter];
[mainView addSubview:vc.view];
通过在init
和dealloc
中记录CustomVC的内存地址,我发现vc
几乎立即被释放,尽管视图仍在屏幕上,一切正常。< / p>
UIView
不一定需要它的控制器吗?或者其他事情正在发生,我误解了?
答案 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中释放。