2010-02-15 231 views
5

Xcode中的泄漏工具在这里显示了内存泄漏。我已经评论了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是在最后发布,并且alloc是平衡的。那么,怎么了?我不明白。

回答

3

如果MyVc.tabBarItem已经设置,无论它的指向可能无法正确释放,从而导致泄漏。

+0

myVC的tabbar属性应该是一个定义要保留的属性。如果这样做,分配给该属性的对象的保留将自动保留。 – TechZen 2010-02-15 20:57:55

+0

好了,但tabBarItem是来自Apple,而不是我;-)我没有为我的View Controller创建任何tabBarItem属性。 Apple做到了。如果我手动发布myVC.tabBarItem是因为Apple已经忘记这么做,是不是会违反内存管理规则? – dontWatchMyProfile 2010-02-15 21:40:53

+0

'tabBarItem'是具有'retain'语义的属性。二传手的泄漏不太可能。 – 2010-07-10 13:54:17

2

它只是表明,下列语句中至少有一个为真:

  1. 仪器是不完美的,有时可见那里并没有任何(反之亦然)泄漏。
  2. 苹果的代码不是没有错误的。

其实,无论是真实的。