关于iPhone:发布和pushViewController

Release and pushViewController

我有一个自定义视图控制器,可按如下所示将其推入导航堆栈:

1
2
3
myViewController *myVC = [[myViewController alloc] init];
[myVC generate:myData];
[self.navigationController pushViewController:myVC animated:YES];

代码运行正常,但是在检查内存泄漏时,我收到一条警告,提示myVC永远不会释放。

添加发布声明

1
[myVC release];

第4行中的

可以正常编译,但是在执行时崩溃。我该如何处理?


我的猜测是,这与这段代码无关。问题在于,以前,由于您不在此处释放它,因此从未将其释放。现在,当您从导航堆栈中弹出视图控制器时,它已被释放,它正在调用myViewControllerdealloc方法,并且其中的一些字符串对象被过度释放。

大概在某个时候在myViewController内设置了一些字符串变量而不保留它,或者在不将其设置为null的情况下将其释放,然后稍后再次释放它。


是的,您应该释放视图控制器。

您看到的错误消息是由于视图控制器内部的内存管理问题导致的-似乎您过度释放了NSString对象。


您应该使用

1
myViewController *myVC = [[myViewController alloc] initWithNibName:nil bundle:nil]

在创建新的视图控制器时,似乎使用带有nil参数的init代替initWithNibName会使pushViewController混乱。这个问题花了我几个小时才能解决,因为它似乎与手头的问题无关!