将ViewControllers的视图添加为subView

时间:2012-12-10 08:01:32

标签: iphone ios viewcontroller

我将ViewControllers视图作为子视图添加到另一个ViewController,

示例:

在FirstScreen视图控制器中,我这样做,

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

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

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

但是虽然调用了添加subView ViewDidLoad 方法,但未调用removeFromSuperView ViewDidUnLoad

我的问题

1)一旦我将实例self.secondScreen设置为nil,我的secondScreen中的所有对象都将被取消分配

2)这样做是否安全,以免我得到任何泄漏或记忆警告

2 个答案:

答案 0 :(得分:2)

假设您的应用程序从iOS 5.0开始支持,您需要将其添加为

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

同样,对于删除,您可以使用removeFromParentViewController然后从超级视图中删除。查看apple documentation here.

从iOS 6.0起,

ViewDidUnLoad已弃用,不会被调用。查看the documentation here.

关于你的问题,

  

1)我的secondScreen中的所有对象一旦被释放,我将被释放   将实例self.secondScreen设置为nil

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

  

2)这样做是否安全,以免我得到任何泄漏或记忆   警告

是的,如果您使用ARC,这很好。对于非ARC,您需要确保已在此类中正确释放所有变量。在这种情况下,确保保留/释放均衡。

答案 1 :(得分:0)

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

  

从内存中释放控制器视图时调用。   (在iOS 6.0中已弃用。在低内存下不再清除视图   条件,因此永远不会调用此方法。)

请注意“已弃用”以及“此方法永远不会被调用”的事实。