将ViewControllers的视图添加为子视图

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

例如:

在FirstScreen viewcontroller我做到这一点,

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

一旦我从FirstScreen中删除它,我做到这一点

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

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

我的问题

1)当我将self.secondScreen设置为零时,我的第二个屏幕中的所有对象都将被释放

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

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

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

同样,对于删除,你可以使用removeFromParentViewController ,然后从超级视图中删除。 检查苹果文件在这里。

ViewDidUnLoad已从iOS 6.0开始弃用,不会被调用。 在这里检查文档。

关于你的问题,

1)当我将self.secondScreen设置为零时,我的第二个屏幕中的所有对象都将被释放

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

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

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

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

当控制器的视图从内存释放时调用。 (在iOS 6.0中不推荐视图不再在低内存条件下清除,所以这个方法从来没有被调用。)

注意“弃用”和“这个方法永远不会被调用”的事实。