Usted dice:
línea de la liberación no realmente liberación ningún objeto en el diccionario. Todavía puedo verlos todos en la siguiente línea . No es hasta que se ejecuta la línea alloc que el diccionario se pone a cero. ¿Hay una manera mejor de hacerlo? ?
Si -release
del diccionario mutable hace que el diccionario para cancelar la asignación - gotas de la cuenta de retención a cero - a continuación, el diccionario mutable dará a conocer todos contenían objetos. Siempre.
Por lo tanto, si los objetos no están siendo liberados, entonces esto sugiere "solución" ...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... es una fuga de memoria en que la instancia original de NSMutableDictionary se filtró.
Como resultado, llamando -removeAllObjects
se vacía el diccionario y liberar todos los objetos que contiene, , pero todavía tiene una pérdida de memoria que se debe averiguar y corregir.
Para ser franco:
Si los objetos en su diccionario no se cancela la asignación cuando se recibe el diccionario lo anterior -release
(sin llamar -removeAllObjects
), entonces no es una pérdida de memoria. Es bien:
Los objetos en el diccionario han sido retenidos un tiempo extra.
Todavía hay un destacado -retain
en el diccionario.
Dado que usted dice los objetos están siendo correctamente (como en, como era de esperar) desasignado cuando llame -removeAllObjects
, entonces debe ser (2). Mire a través de su código y descubra dónde hay un -retain
extra del diccionario. Puede utilizar el instrumento Object Alloc para averiguar exactamente de dónde provienen todas las reservas.
Tiene usted razón. Por alguna razón, no apareció en la sugerencia del código cuando lo intenté inicialmente ... así que supuse que no estaba disponible. Ya lo veo. Gracias. – 4thSpace
Esto no responde la pregunta. '-release' en el diccionario liberará todos los objetos contenidos. 4thSpace tiene un problema diferente. – bbum
Solo quiero hacerme eco de que si liberas un NSDictionary y los objetos no se lanzan, significa que esos objetos tienen un valor de retención de más de uno, lo que significa que están siendo retenidos o no se están liberando correctamente en otro lugar. Cuando agrega los objetos al diccionario, ¿los está liberando (o soltándolos) correctamente? – lucius