0

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

- (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 释放(当然在将其分配为零之前),程序因 EXC_BAD_ACCESS 而崩溃,因为释放消息发送到已释放的实例 [CALayer]...

任何想法?非常感谢

4

4 回答 4

2

试试这种方式

- (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
}
于 2011-03-24T11:15:46.733 回答
1

这可以在不崩溃的情况下工作吗?

- (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]
}
于 2011-03-24T11:20:57.747 回答
0

尝试“initwithnibname”

不相关,但如果您追逐内存泄漏,请不要忘记释放MyObject

于 2011-03-24T11:28:34.510 回答
-1

当您设置detailView = nil;而不释放它时,您只会将指向内存的指针归零。在您释放它之前,仍然会分配内存块。

您必须使用[detailView release]beforedetailView = nil否则您将无法再次引用该内存块(内存泄漏)。

于 2011-03-24T12:34:27.570 回答