我有一个自定义视图控制器,我按如下方式推送到我的导航堆栈:
myViewController *myVC = [[myViewController alloc] init];
[myVC generate:myData];
[self.navigationController pushViewController:myVC animated:YES];
代码运行正常,但在检查内存泄漏时,我收到警告,myVC永远不会被释放。
添加发布声明
[myVC release];
第4行中的编译正常,但在执行时崩溃。我该如何处理?
答案 0 :(得分:3)
我的猜测是它与这部分代码无关。问题是之前,因为你没有在这里发布它,它从未被释放。现在,当您从导航堆栈弹出视图控制器时它正被释放,它正在调用dealloc
myViewController
方法,并且某些字符串对象在那里被过度释放。
据推测,某些字符串变量在myViewController
内部设置而不保留它,或者在未设置为null的情况下释放,然后再次释放它。
答案 1 :(得分:0)
是的,您应该释放视图控制器。
您看到的错误消息是由视图控制器中的内存管理问题引起的 - 您似乎过度释放了NSString
对象。
答案 2 :(得分:-3)
你应该使用
myViewController *myVC = [[myViewController alloc] initWithNibName:nil bundle:nil]
在创建新的视图控制器时,似乎使用init而不是带有nil参数的initWithNibName会使pushViewController变得混乱。这是一个需要花费数小时才能解决的问题,因为似乎与手头的问题无关!