iOS: cuándo asignar y cuándo crear una copy nueva de los objects asignados a una propiedad

(Alguien edita el título, claramente no soy genial con la jerga todavía)

Entonces, digamos que tengo un object llamado DataRequester cuyo trabajo es crear una NSURLConnection y también ser su delegado. Instancio el object desde mi controller de vista raíz y también proporciono un bloque de callback (que es una propiedad de DataRequester ). Cuando la NSURLConnection ha finalizado la carga, NSURLConnection la callback y paso el NSData como un parámetro.

Ahora, dentro de mi controller de vista raíz, donde se define el bloque de finalización, quiero almacenar el NSData en una propiedad NSData (strong,nonatomic) *responseData del controller de la vista raíz. Mi pregunta es, en la callback debería estar usando

 weakSelf.responseData = [NSData dataWithData:passedInData]; 

o puedo simplemente usar:

  weakSelf.responseData = passedInData; 

(Donde RootViewController * __weak weakSelf = self) También el proyecto usa ARC.

Se agradecerá una breve explicación de la respuesta correcta y me ayudará a comprender cómo se gestiona la memory (he hecho muchas lecturas, pero un ejemplo práctico / explicación sería muy útil para mí).

Yo usaría una propiedad de copy :

 NSData (copy,nonatomic) *responseData; // Then weakSelf.responseData = passedInData; 

Se sugiere una propiedad de copy cuando la propiedad es un puntero a una class que también tiene una subclass mutable, para evitar circunstancias en las que su object muta sin que usted lo sepa. Supongamos, por ejemplo, que hay otra class que contiene un puntero a este object de datos, y que es mutable. La otra class puede cambiarlo sin que lo sepa.

No necesita copyrlo si la propiedad es de readonly , y está seguro de que apunta a un object inmutable. Sin embargo, enviar un post de copy a un object inmutable no es caro: devuelve el object mismo.