propiedad iVar, ¿acceso a través de uno mismo?

Entiendo que al acceder a los métodos setter / getter para las propiedades debería usar [ self setThisValue:@"a"]; en lugar de thisValue = @"a"; Sin embargo, con el ejemplo a continuación puedo ver que al agregar documentos propios estoy enviando un mensaje a una propiedad de iVar en lugar de una variable de ámbito local, pero ¿hace algo más en este caso?

 @interface CustomController : UIViewController { NSMutableArray *foundList; } @property(nonatomic, retain) NSMutableArray *foundList; @end 

.

 [[self foundList] addObject:eachObject]; // I usually write this ... 

O

 [foundList addObject:eachObject]; 

Gary.

Si tiene una propiedad definida para un ivar, debe usarla en lugar de acceder al ivar directamente. Eso permite que las subclases anulen el setter / getter y hagan algo diferente a solo obtener el valor del ivar.

La única excepción es en los métodos init y dealloc.

Utilizando

 [[self foundArray] addObject:eachObject]; 

simplemente agrega una llamada adicional al método captador, lo cual es innecesario en la mayoría de los casos aquí, creo. Por otro lado, a menos que implementes tu propio getter personalizado y hagas cosas raras, la sobrecarga de este constructo es muy pequeña, así que en la práctica es solo cuestión de estilo en mi opinión. (Yo personalmente no usaría propiedad aquí)

El método de acceso es muy conveniente si alguna vez subclasifica o hace que otros reutilicen su código y quieran anular su funcionalidad.

El uso de self.ivar también tiene algunos problemas con la limpieza de la memoria. esp. usted ha retenido una propiedad perteneciente a otra clase. Luego obtienes cualquier objeto nuevo y quieres cambiar la referencia a self.ivar = newObject. si no usa self.ivar, puede tener acceso incorrecto, cuando newObject también es propiedad de otros. El instalador predeterminado, busca referencias, si no es nada, libera el valor anterior y establece el nuevo ivar a su nuevo valor. Estaba usando sin un objeto sin yo hoy, y caí en este problema. En resumen, si el objeto es compartido, use self.ivar …