我将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)这样做是否安全,以免我得到任何泄漏或记忆警告
答案 0 :(得分:2)
假设您的应用程序从iOS 5.0开始支持,您需要将其添加为
[self addChildViewController:self.secondScreen];
[self.view addSubview:self.secondScreen.view];
同样,对于删除,您可以使用removeFromParentViewController
然后从超级视图中删除。查看apple documentation here.
ViewDidUnLoad
已弃用,不会被调用。查看the documentation here.
关于你的问题,
1)我的secondScreen中的所有对象一旦被释放,我将被释放 将实例self.secondScreen设置为nil
完成self.secondScreen
类后,一旦将其设置为nil,它将开始释放此类中的对象。如果你使用ARC,你不必担心释放。操作系统会处理这些事情。
2)这样做是否安全,以免我得到任何泄漏或记忆 警告
是的,如果您使用ARC,这很好。对于非ARC,您需要确保已在此类中正确释放所有变量。在这种情况下,确保保留/释放均衡。
答案 1 :(得分:0)
从内存中释放控制器视图时调用。 (在iOS 6.0中已弃用。在低内存下不再清除视图 条件,因此永远不会调用此方法。)
请注意“已弃用”以及“此方法永远不会被调用”的事实。