将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中不推荐视图不再在低内存条件下清除,所以这个方法从来没有被调用。)
注意“弃用”和“这个方法永远不会被调用”的事实。