2010-12-10 86 views
0
MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ]; 
[self.view addSubview:viewController.view]; 

然后删除我的viewController如何正确删除UIViewController?

[self.view removeFromSuperview]; 

但漏仪显示20 MB内存

有什么不对?

回答

0

你叫alloc,所以你有责任释放它。您的代码应该是这样的:

MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ]; 
[self.view addSubview:viewController.view]; 
[viewController release] 

请注意,您的控制器是由视图当你打电话addSubview保留,当你调用removeFromSuperview释放。因此,使用当前代码调用removeFromSuperview之后,viewController的保留计数仍为1。

另外,你应该在这里回顾Objective-C的内存manament:http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

+1

将视图添加到另一个视图时,控制器不会保留在视图中。只保留视图,所以上面的代码会导致问题。 – executor21 2010-12-10 19:20:07

+0

确实你是对的。看起来原来的海报正在以意想不到的方式使用视图控制器。 – DigitalBytes 2010-12-10 19:34:49

1

你泄露视图控制器对象。从超级视图中删除视图后,还需要释放控制器。

或者,你可以做到以下几点:

[self presentModalViewController:viewController animated:NO]; 
[viewController release]; 

然后,当dismissModalViewController叫,无论是视图和视图控制器将被正确地释放。