iphone - teclado - ¿Cómo borrar un diccionario?
texto predictivo iphone (4)
-removeAllObjects funcionará, como mencionó Andy. Sin embargo, si alguno de los objetos de su diccionario se libera automáticamente, o si el diccionario se ha lanzado automáticamente en algún lugar a lo largo de la línea, no se desechará hasta la próxima vez que finalice el runloop (cuando se agote el grupo de autorelease) .
Actualmente estoy haciendo lo siguiente para borrar un NSMutableDictionary
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
La línea de lanzamiento en realidad no libera ningún objeto en el diccionario. Todavía puedo verlos a todos en la siguiente línea. No es hasta que se ejecuta la línea de asignación que el diccionario se pone a cero. Hay una mejor manera de hacerlo?
No puedo probarlo en este momento, pero ¿has probado el método NSMutableDictionary
de NSMutableDictionary
?
Tu dices:
La línea de lanzamiento en realidad no libera ningún objeto en el diccionario. Todavía puedo verlos a todos en la siguiente línea. No es hasta que se ejecuta la línea de asignación que el diccionario se pone a cero. Hay una mejor manera de hacerlo?
Si el -release
del diccionario mutable hace que el diccionario se desasigne, el conteo de retenciones se reduce a cero, entonces el diccionario mutable liberará todos los objetos contenidos. Siempre.
Por lo tanto, si los objetos no se liberan, entonces esto sugiere "arreglar" ...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... es una pérdida de memoria en la que se filtrará la instancia original de NSMutableDictionary.
Como resultado, al llamar a -removeAllObjects
se -removeAllObjects
el diccionario y se liberarán todos los objetos contenidos, pero todavía tiene una pérdida de memoria que debe resolver y solucionar.
Para ser honestos:
Si los objetos en su diccionario no se desasignan cuando el diccionario recibe la -release
anterior (sin llamar a -removeAllObjects
), entonces hay una pérdida de memoria. Es o bien:
Los objetos en el diccionario se han conservado un tiempo extra.
Todavía hay una pendiente
-retain
en el diccionario.
Como dice que los objetos están siendo desasignados correctamente (como en, como se esperaba) cuando llama a -removeAllObjects
, entonces debe ser (2). Mire a través de su código y averigüe dónde hay un nuevo extra del diccionario. Puede utilizar el instrumento Object Alloc para averiguar exactamente de dónde provienen todas las retenciones.
[aMutableDictionary removeAllObjects];
De la documentación de Apple :
(void)removeAllObjects
Descripción - Vacía el diccionario de sus entradas. Cada clave y objeto de valor correspondiente se envía un mensaje de liberación.
Disponibilidad - iOS (2.0 y posteriores)