2010-02-15 17 views
5

El instrumento Leaks en Xcode me muestra una pérdida de memoria aquí. He comentado la línea afectada por la cual Leaks se queja. Pero veo ningún error en mi gestión de memoria ...¿Por qué este código produce una pérdida de 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]; 
} 

quiero decir ... TBI y myVC se libera al final, y el alloc es equilibrada. ¿Así que qué hay de malo? No lo entiendo

Respuesta

3

si MyVc.tabBarItem ya está configurado, lo que sea que esté apuntando puede no ser desasignado correctamente, causando una fuga.

+0

La propiedad tabbar de myVC debe ser una propiedad definida para conservar. Si lo hace, la retención de los objetos asignados a la propiedad se mantendrá automáticamente. – TechZen

+0

, pero tabBarItem es de Apple, no de mí ;-) No creé ninguna propiedad tabBarItem para mi View Controller. Apple lo hizo Sería contrario a las reglas de administración de memoria liberar manualmente myVC.tabBarItem solo porque Apple lo haya olvidado, ¿no es así? – dontWatchMyProfile

+0

'tabBarItem' es una propiedad con semántica' retain'. Es muy poco probable que haya una fuga en el colocador. –

2

que sólo sirve para demostrar que al menos una de las siguientes afirmaciones es verdadera:

  1. Instruments no es perfecto y en ocasiones muestra fugas donde no hay ninguna (y viceversa).
  2. El código de Apple no está libre de errores.

De hecho, ambos son verdaderos.

Cuestiones relacionadas