|
Hola tengo una tabla que al tocar cada fila te lleva a otra vista con varios datos e imágenes diferentes en función de la row que elijas. la estructura es la siguiente:
La cuestión es al pulsar varias veces adelante y atrás la app se me cae y al depurar con analyze obtengo varios potential leak of an object todos relacionados con el contador que lleva una cuenta +1. en concreto obtengo dos pistas de donde esta el problema: 1.Method returns an Objetive C object with a +1 count retain (justo encima de NSMutableDictionary.) 2.Object leaked:Allocated object is not referenced later in this execution path and has a retain count of +1 ( este aviso esta en el grupo 2 debajo del primer NSMutableDictionary del grupo1) Creo que se debe al NSMutableDictionary pero no se como liberarlo sin que afecte a los datos, lo he intentado pero si coloco un autorelease despues del grupo2 donde están los datos de la fila 2 no me soluciona el problema, la verdad es que me doy cuenta qu estoy bastante verde en depurado de código, a alguien se le ocurre algo? |
|
Hola @fidel218, El codigo que has pegado arriba tiene varias problemas, y te recomendaria que vuelvas a leer de nuevo todo lo relacionado con el memory management. En este caso en conreto:
estas creando un NSMutableDictionare con alloc init (retain count +1) y luego el addObject (retain count +1) , lo que hace que en total tienes un retainCount == 2. Cuando haces release al objeto que lo contiene (Grupo1 o Group2) se disminuye el retain count a +1 y ya pierdes la referencia a el ... lo que produce un memory leak. Para solucionarlo podrias hacerlos con autorelease :
Lo que es importante en este caso es que no hagas el release al Grupo1 y al Grupo2 , ya que luego estas trabajando con estos objetos. Hazles release en el dealloc, o cuando ya estas seguro que no volveras a usarlos. No se si hay mas cosas, porque el codigo que has pegado tiene pinta de ser incompleto , lo mas probable es que has borrado parte de el pensando que no esta relacionado... Conclusion: siempre que haces un [[x aloc] init] tienes que encargarte de hacer el release. Tambien hay que hacerlo con retain] o copy] ... |