addSubView到当前ViewController时的内存泄漏警告

时间:2011-05-17 12:43:46

标签: iphone objective-c

当我将currentView添加到Current ViewController时,我收到内存泄漏警告....这是我的代码..

     NoOfGolferViewController *objNoOfGolferViewController = [[NoOfGolferViewController alloc]initWithNibName:@"NoOfGolferViewController" bundle:nil];
     [objNoOfGolferViewController setParent:self];
     [objNoOfGolferViewController.view setFrame:CGRectMake(15, 110, 290, 330)];
     [self.view addSubview:objNoOfGolferViewController.view];

当我发布对象

      [objNoOfGolferViewController release];

应用程序通过提供EXE_BAD_ACCESS消息而崩溃。

如何解决此内存泄漏警告?

提前致谢..

4 个答案:

答案 0 :(得分:3)

只要视图在当前控制器中可见或使用,您就需要使objNoOfGolferViewController对象保持活动状态。看起来最好的解决方案是使它成为当前类的实例变量并在其dealloc方法中释放objNoOfGolferViewController

答案 1 :(得分:1)

可能你是在本地声明变量。 而是将其设为全局并以dealloc发布。 这背后的原因是当您释放对象时,委托方法与正在进行的方法相关。

OR

删除视图后,您可以释放该对象。

答案 2 :(得分:0)

通常,在释放已经释放的对象时会收到此消息。我一直在使用下面的方法(在iOS4 - fast context switching的SO上找到)来追踪过去的这类问题:

#pragma mark - RETAIN DEBUG MAGIC
// -----------------------------------------------------------------------------

- (id)retain
{
  NSLog(@"retain \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
  return [super retain];
}
- (void)release
{
  NSLog(@"release \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
  [super release];
}
- (id)autorelease
{
  NSLog(@"autorelease \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
  return [super autorelease];
}

我几天前在SO处写了一个类似的例子(我遇到了保留和发布一些观点的问题)。如果您有兴趣,请点击此链接:Understanding iOS Instruments

祝你好运!

答案 3 :(得分:0)

让它自动释放......如下所述

NoOfGolferViewController *objNoOfGolferViewController = [[[NoOfGolferViewController alloc]initWithNibName:@"NoOfGolferViewController" bundle:nil] autorelease];