Iphone UIViewController在自动删除时会泄漏内存或使应用程序崩溃

Iphone UIViewController在自动删除时会泄漏内存或使应用程序崩溃,iphone,Iphone,我的应用程序中有这个代码,上面写着“gvc”内存泄漏 GameViewController* gvc = [[GameViewController alloc] init]; [self.navigationController pushViewController:gvc animated:YES]; 如果我将此代码修改为autorelease view controller,它会在给出错误“Missed Method”后使我的应用程序崩溃 GameViewController* gvc =

我的应用程序中有这个代码,上面写着“gvc”内存泄漏

GameViewController* gvc = [[GameViewController alloc] init];
[self.navigationController pushViewController:gvc animated:YES];
如果我将此代码修改为autorelease view controller,它会在给出错误“Missed Method”后使我的应用程序崩溃

GameViewController* gvc = [[[GameViewController alloc] init] autorelease];
[self.navigationController pushViewController:gvc animated:YES];
自动释放有什么问题吗?如何解决此内存泄漏?
提前谢谢。

完成后就发布吧。如果你一直需要它,那么把
GameViewController*gvc放在标题中,并放入
[gvc释放]在dealloc方法中。

显而易见的解决方案是,一旦将视图控制器推到导航控制器上,就释放视图控制器

i、 e:


这就是说,如果自动释放确实导致内存泄漏,我会感到惊讶。

您可以安全地执行以下操作:

GameViewController* gvc = [[[GameViewController alloc] init] autorelease];
[self.navigationController pushViewController:gvc animated:YES];
或者这个:

GameViewController* gvc = [[GameViewController alloc] init];
[self.navigationController pushViewController:gvc animated:YES];
[gvc release];

它们在功能上是等效的,不会导致内存泄漏或崩溃。查看
[self.navigationController-pushViewController:gvc-animated:YES]之后的代码
查看您是否过度释放了全球价值链,它可能就是一切。我的意思是,您的第一个代码显然是泄漏的,第二个代码片段乍一看是可以的,但我们不知道您在该类中实现了什么。想象一下,在GameViewController中,您有一个字符串属性userName,在其dealloc中,您可以执行以下操作:

- (void)dealloc
{
    [userName release];
    [userName release];
    [super dealloc];
}
当然,当您释放控制器时,它会崩溃。您应该使用gdb backtrace(崩溃时键入“bt”)来查看崩溃的确切位置,或者更好的做法是,尝试启用NSZombie并使用工具来查找


顺便说一句,在iPhone/iPad编程中(资源稀缺),请尽可能避免自动释放。

哪个特定工具告诉您内存泄漏?XCode中的Build and Analysis显示内存泄漏。我已经尝试过自动释放,它会显示“Missed Method”并崩溃。我刚刚尝试了[gvc release],在按下ViewController行后得到了相同的结果。此外,我不会过度释放全球价值链。我想补充的一点是,我的应用程序只有一个xib(MainWindow.xib),其他所有内容都是使用代码生成的。是因为这个吗?感谢此gvc用于欢迎屏幕,其他屏幕被推到欢迎屏幕顶部并弹出。你认为我应该用你的方法吗?我想我的欢迎屏幕将保持它创建后的状态,其他屏幕将被分配->推送->弹出->取消分配。
- (void)dealloc
{
    [userName release];
    [userName release];
    [super dealloc];
}