2012-12-10 128 views
2

我增加了ViewControllers查看作为一个子视图到另一个视图控制器,添加ViewControllers的视图子视图

例子:

在FirstScreen视图 - 控制我这样做,

  [self.view addSubview:self.secondScreen.view]; 

,一旦我删除它从FirstScreen我这样做

  [self.secondScreen.view removeFromSuperView]; 
      self.secondScreen=nil; 

但虽然添加e子视图ViewDidLoad方法被调用,但removeFromSuperView ViewDidUnLoad未被调用。

我的问题

1)我会在我的secondScreen所有物体会释放一次,我实例self.secondScreen设为零

2)它是安全的不喜欢,这样我不会得到任何泄漏或内存警告

回答

2

假设您的应用的iOS 5.0支持以后,你需要将它同样添加为,

[self addChildViewController:self.secondScreen]; 
[self.view addSubview:self.secondScreen.view]; 

去除您可以使用removeFromParentViewController,然后从上海华删除。支票apple documentation here.

ViewDidUnLoad已从iOS 6.0开始弃用,不会被调用。检查the documentation here.

关于您的问题,

1)我会在我的secondScreen的所有对象都会得到解除了分配一次,我 实例self.secondScreen设为零

一旦你与完成self.secondScreen类,一旦将其设置为零,它将开始释放此类中的对象。如果你使用ARC,你不必担心释放。操作系统将照顾这些事情。

2)它是安全的不喜欢,这样我不会得到任何泄漏或内存 警告

是的,这是好的,如果你正在使用ARC。对于非ARC,你需要确保你已经在这个类中正确释放了所有的变量。在这种情况下确保保持/释放完全平衡。

+1

感谢您的解释 –

+0

请参阅第16分钟的WWDC 2011会议102“实现UIViewController遏制”。您不应该在控制器上使用这些方法,因为他们没有实现,因为他们有孩子,他们没有期望。 危险:“此方法仅用于由自定义容器视图控制器的实现调用” – MacMark

0

当视图从ViewController中移除时,不会调用ViewDidUnload,它会在视图从内存中卸载时调用。有关此iOS的文档有以下警告:

从控制器的视图释放内存时调用。 (不建议使用iOS中6.0。视图是在低内存不再清除 条件,所以这种方法不会被调用。)

注意“过时”而事实上,“这种方法不会被调用”。