首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请帮助: UINavigationController和视图控制器内存管理

请帮助: UINavigationController和视图控制器内存管理
EN

Stack Overflow用户
提问于 2011-03-24 19:09:04
回答 4查看 510关注 0票数 0

我有一个奇怪的问题,每次按下按钮时都会调用一个方法:

代码语言:javascript
复制
- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init];  // line A
  [self.navigationController pushViewController:detailView animated:YES];
  [detailView setObject:obj];
  detailView = nil;  // should I also release it? -- line B
}

问题是,我很抱歉我不得不释放detailView (内存工具显示我有一个内存泄漏是没有完成的),也因为navigationController应该保留我的detailView,但如果我试图在"A“行或"B”行添加自动释放,或者只是在"B“行添加detailView的释放(当然,在分配它为空之前),程序崩溃,并向释放的实例CALayer发送EXC_BAD_ACCESS‘原因释放消息...

有什么想法吗?非常感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-24 19:20:58

它能在不崩溃的情况下工作吗?

代码语言:javascript
复制
- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init];
  [self.navigationController pushViewController:detailView animated:YES];
  //[detailView setObject:obj];  // <- What's this for?
  [detailView release]
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-24 19:15:47

这样试试吧。

代码语言:javascript
复制
- (void)launcherView:(TTLauncherView*)lnchr didSelectItem:(TTLauncherItem*)itm {
  MyObject* obj = ...

  MyViewController* detailView = [[MyViewController alloc] init]; 
  [detailView setObject:obj];
  [self.navigationController pushViewController:detailView animated:YES];
  [detailView release];
  detailView = nil;  // now this will be optional
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-24 19:28:35

试试"initwithnibname“

无关,但如果您正在追踪内存泄漏,请不要忘记释放MyObject

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

https://stackoverflow.com/questions/5418183

复制
相关文章

相似问题

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