为什么这段代码会产生内存泄漏?

时间:2010-02-15 20:28:37

标签: iphone memory-management memory-leaks instruments

Xcode中的Leaks Instrument向我展示了内存泄漏。我评论了Leaks抱怨的受影响的线路。但我发现我的记忆管理没有错误......

- (void)setupViewController {
    MyViewController *myVC = [[MyViewController alloc] init];

    UITabBarItem *tbi = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:1];
    myVC.tabBarItem = tbi; // LEAK: 128 bytes

    self.myViewController = myVC;

    [myVC release];
    [tbi release];
}

我的意思是... tbi和myVC IS在最后发布,并且alloc IS平衡了。那有什么不对?我不明白。

2 个答案:

答案 0 :(得分:3)

如果已经设置了MyVc.tabBarItem,那么无论它指向什么,都可能无法正确释放,导致泄漏。

答案 1 :(得分:2)

它只是表明至少有下列陈述之一是真的:

  1. 仪器不完美,有时会出现没有泄漏的情况(反之亦然)。
  2. Apple的代码不是没有错误的。
  3. 事实上,两者都是真的。