2010-02-15 230 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. 蘋果的代碼不是沒有錯誤的。

其實,無論是真實的。