2

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

例子 :

在 FirstScreen viewcontroller 我这样做,

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

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

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

但是虽然调用了添加子视图ViewDidLoad方法,但没有调用 removeFromSuperView ViewDidUnLoad方法。

我的问题

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

2)这样做是否安全,这样我就不会收到任何泄漏或内存警告

4

2 回答 2

2

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

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

同样,对于删除,您可以使用removeFromParentViewController然后从 superview 中删除。在此处查看苹果文档。

ViewDidUnLoad从 iOS 6.0 起已弃用,不会被调用。在此处查看文档。

关于你的问题,

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

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

2)这样做是否安全,这样我就不会收到任何泄漏或内存警告

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

于 2012-12-10T08:07:46.303 回答
0

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

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

请注意“已弃用”和“从未调用此方法”这一事实。

于 2012-12-10T08:07:36.517 回答