2012-10-08 35 views
5

He estado utilizando instrumentos para encontrar asignaciones que no se están liberando correctamente. Tengo MKMapViewDelegate que agrega un mapa a través de un método de instancia después de que se ha instanciado. Puedo ver en el árbol de llamadas que este método conserva alrededor de 300 KB de memoria, después de que se lanza ViewDelegate. Comenté la carne del código y le sigue mantiene la memoria con sólo esta línea:MKMapView initWithFrame no libera memoria con ARC

self.map = [[MKMapView alloc] initWithFrame:CGRectMake(10, 210, 300, 125)]; 

miro en la lista de objetos y la misma no está viviendo MKMapView, pero a medida que sigo creando nuevas ViewDelegates, que la memoria sigue sumando Así es como el mapa se define:

@property (strong, nonatomic)  MKMapView *map; 

delegado de la correspondencia se fija a cero, así como la referencia en dealloc del ViewDelegate

self.map.delegate = nil; 
self.map = nil; 
+0

¿Qué le parece usar el lanzamiento en lugar de cero? ¿Puedes verificar eso al final? –

+2

@ S.P. están usando ARC, no hay lanzamiento. –

+0

@ S.P. nadie más se refiere a esa propiedad, ¿verdad? ¿Nada más potencialmente sosteniendo una referencia? –

Respuesta

1

Una vez configurado el delegado a cero, ya no hay cualquier puntero, y iOS lo lanzará cuando lo desee. iOS no puede liberar la memoria inmediatamente después de configurarla en cero.

Recuerda que estás eliminando el puntero configurándolo en cero, pero el objeto aún permanece en el montón, básicamente sin hacer nada, hasta que se asigna algo más allí.

(supongo que también eliminó el MKMapView de su super visión usando [self.map removeFromSuperView]).

+0

¿Los instrumentos no reconocen qué memoria es en realidad en vivo y en uso? Entiendo que en la memoria existen objetos hasta que se sobreescriben, pero no es el objetivo de los instrumentos, ya que muestra lo que todavía hace referencia la aplicación y, por lo tanto, esa memoria no se puede reasignar. Tengo un código que tiene removeFromSuperView, pero está comentado, y se agrega como subvista. – spedly

Cuestiones relacionadas