Release和pushViewController

时间:2010-05-18 13:05:10

标签: iphone objective-c xcode

我有一个自定义视图控制器,我按如下方式推送到我的导航堆栈:

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

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

添加发布声明

[myVC release];
第4行中的

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

3 个答案:

答案 0 :(得分:3)

我的猜测是它与这部分代码无关。问题是之前,因为你没有在这里发布它,它从未被释放。现在,当您从导航堆栈弹出视图控制器时它正被释放,它正在调用dealloc myViewController方法,并且某些字符串对象在那里被过度释放。

据推测,某些字符串变量在myViewController内部设置而不保留它,或者在未设置为null的情况下释放,然后再次释放它。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-3)

你应该使用

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

在创建新的视图控制器时,似乎使用init而不是带有nil参数的initWithNibName会使pushViewController变得混乱。这是一个需要花费数小时才能解决的问题,因为似乎与手头的问题无关!