2010-02-15 11 views
5

Lo strumento Leaks in Xcode mi mostra una perdita di memoria qui. Ho commentato la linea interessata di cui Leaks si lamenta. Ma non vedo alcun errore nel mio gestione della memoria ...Perché questo codice produce una perdita di memoria?

- (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]; 
} 

Voglio dire ... TBI e myVC viene rilasciato alla fine, e l'alloc è equilibrato. Quindi cosa c'è che non va? Non capisco

risposta

3

se MyVc.tabBarItem è già impostato, qualsiasi cosa indichi potrebbe non essere deallocato correttamente causando una perdita.

+0

La proprietà tabbar di myVC deve essere una proprietà definita da conservare. Se lo fai, la conservazione degli oggetti assegnati alla proprietà verrà mantenuta automaticamente. – TechZen

+0

bene, ma tabBarItem è di Apple, non da me ;-) Non ho creato alcuna proprietà tabBarItem per il mio controller di visualizzazione. Apple ha fatto. Sarebbe contro le regole di gestione della memoria se rilascio manualmente myVC.tabBarItem solo perché Apple ha dimenticato di farlo, no? – dontWatchMyProfile

+0

'tabBarItem' è una proprietà con la semantica' retain'. È molto improbabile che ci sia una perdita nel setter. –

2

si va solo a dimostrare che almeno uno dei seguenti affermazioni è vera:

  1. Instruments non è perfetto e talvolta mostra crepe dove non ci sono (e viceversa).
  2. Il codice Apple non è privo di errori.

In effetti, entrambi sono vere.

Problemi correlati