Pregunta

Estoy trabajando en una aplicación de iPhone que construir, en tiempo de ejecución, un NSMutableDictionary para el que los valores (de los pares de clave y valor) será NSMutableArrays. Siendo algo nuevo en el Objective-C, me preocupa que la siguiente provocará una pérdida de memoria:

- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
    supplierPhotoArray = [[NSMutableArray alloc] init];
    [supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
    [supplierPhotoArray release];
}
}

supplierPhotos es un NSMutableDictionary, que es una variable miembro de la clase que contiene.

Como se puede ver, cuando estoy aceptando una nueva UIImage * poner en la estructura, en primer lugar comprobar para ver si el objeto en el par clave-valor correspondiente al segundo argumento (IdProveedor) es nula. Si es nil, que alloc un nuevo NSMutableArray y establecerlo como el objeto de esa tecla, luego soltarlo. Suponiendo que el dealloc NSMutableDictionary en el dealloc de la clase que contiene este método, se darán a conocer las referencias? Antes dealloc-ción del NSMutableDictionary, qué necesito para correr a través de él y dealloc los NSMutableArrays individuales contenidas dentro?

Gracias,

Ben B.

¿Fue útil?

Solución

cuando se agrega objetos en un recipiente como el diccionario o matriz, retener será invocado de forma automática, y al soltar el contenedor como su duda de que es el diccionario, se llamará 'liberación' de cada objeto a dealloc la memoria del objeto.

Otros consejos

esta gestión de memoria es correcta para mí. Suelte el una copia que ha alloc'd, y la matriz contiene otra referencia vez que se agrega a la misma, por lo que el recuento neto es 1, que es la correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top