texto teclado tamaño predictivo palabras guardadas eliminar diccionario como cambiar autocorrector aumentar iphone objective-c cocoa-touch nsmutabledictionary

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?



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:

  1. Los objetos en el diccionario se han conservado un tiempo extra.

  2. 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)