Iphone 如何正确删除UIViewController?

Iphone 如何正确删除UIViewController?,iphone,uiviewcontroller,Iphone,Uiviewcontroller,然后我删除我的viewController MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ]; [self.view addSubview:viewController.view]; 但泄漏仪器显示20 MB内存 出什么问题了?您调用了alloc,所以您有责任发布它。您的代码应该如下所示: [self.view rem

然后我删除我的viewController

MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ];
[self.view addSubview:viewController.view];
但泄漏仪器显示20 MB内存


出什么问题了?

您调用了
alloc
,所以您有责任发布它。您的代码应该如下所示:

[self.view removeFromSuperview];
请注意,当您调用addSubview时,视图会保留控制器,而当您调用removeFromSuperview时,视图会释放控制器。因此,对于当前代码,调用removeFromSuperview后,viewController的保留计数仍然为1


此外,您应该在此处查看objective-c内存管理:

您泄漏了view controller对象。从superview中删除视图后,还需要释放控制器

或者,您可以执行以下操作:

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

然后,当调用
dismissModalViewController
时,视图和视图控制器都将被正确释放。

将视图添加到另一个视图时,视图不会保留控制器。只有视图被保留,所以上面的代码会导致问题。确实,你是对的。原始海报似乎以意外的方式使用了视图控制器。
[self presentModalViewController:viewController animated:NO];
[viewController release];