首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Release和pushViewController

Release和pushViewController
EN

Stack Overflow用户
提问于 2010-05-18 21:05:10
回答 3查看 2.2K关注 0票数 1

我有一个自定义的视图控制器,我把它推到我的导航堆栈上,如下所示:

代码语言:javascript
复制
myViewController *myVC = [[myViewController alloc] init];
[myVC generate:myData];
[self.navigationController pushViewController:myVC animated:YES];

代码运行得很好,但是在检查内存泄漏时,我得到了一个警告,myVC永远不会被释放。

添加release语句

代码语言:javascript
复制
[myVC release];

第4行编译正常,但在执行时崩溃。我需要如何处理这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-18 21:49:26

我的猜测是它与这段代码没有任何关系。问题是以前,因为你没有在这里发布它,所以它从来没有被释放过。现在,当您从导航堆栈中弹出视图控制器时,它将被释放,它将调用myViewControllerdealloc方法,并且其中的一些string对象将被过度释放。

可能在某个时刻,在myViewController中设置了一些字符串变量而没有保留它,或者释放了它而没有设置为null,然后再释放它。

票数 3
EN

Stack Overflow用户

发布于 2010-05-18 21:49:34

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

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

票数 0
EN

Stack Overflow用户

发布于 2011-10-24 06:23:15

你应该使用

代码语言:javascript
复制
myViewController *myVC = [[myViewController alloc] initWithNibName:nil bundle:nil]

在创建新的视图控制器时,似乎使用init而不是没有任何参数的initWithNibName会把pushViewController搞得一团糟。这是一个我花了几个小时才解决的问题,因为它似乎与手头的问题无关!

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2857479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档