Respuesta actualizada para documentación modificada
La información ahora se distribuye en varias guías de la documentación. Aquí hay una lista de lecturas obligatorias:
La respuesta a esta pregunta ahora depende completamente de si está utilizando una aplicación administrada por ARC (el predeterminado moderno para nuevos proyectos) o si está forzando la administración manual de memoria.
Asignar frente a débil : use asignar para establecer el puntero de una propiedad a la dirección del objeto sin retenerlo o curarlo de otra manera; use débil para que la propiedad apunte automáticamente a cero si el objeto que se le asignó se desasignó. En la mayoría de los casos, querrá usar débil para no intentar acceder a un objeto desasignado (acceso ilegal a una dirección de memoria - " EXC_BAD_ACCESS
") si no realiza una limpieza adecuada.
Retener frente a Copiar : las propiedades declaradas usan retener de forma predeterminada (por lo que simplemente puede omitirlo por completo) y administrará el recuento de referencias del objeto automáticamente si otro objeto está asignado a la propiedad o si está establecido en cero; Use copiar para enviar automáticamente un -copy
mensaje al objeto recién asignado (que creará una copia del objeto pasado y asignará esa copia a la propiedad en su lugar; es útil (incluso necesario) en algunas situaciones en las que el objeto asignado podría modificarse después de haber sido configurado como una propiedad de algún otro objeto (lo que significaría que la modificación / mutación también se aplicaría a la propiedad).
La Guía de programación de administración de memoria de la Biblioteca de referencia de iOS tiene conceptos básicos de asignación, copia y retención con analogías y ejemplos.
fuente
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil]; NSMutableArray *copiedArray = [array mutableCopy]; NSMutableArray *retainedArray = [array retain]; [retainedArray addObject:@"Retained Third"]; [copiedArray addObject:@"Copied Third"]; NSLog(@"array = %@",array); NSLog(@"Retained Array = %@",retainedArray); NSLog(@"Copied Array = %@",copiedArray); array = ( First, Second, "Retained Third" ) Retained Array = ( First, Second, "Retained Third" ) Copied Array = ( First, Second, "Copied Third" )
fuente
asignar
Copiar:
conservar:
fuente