iphone objective-c memory-management properties accessor

iphone - diferencia entre acceder a una propiedad a través de "nombre de propiedad" frente a "self.propertyname" en objetivo-c?



objective-c memory-management (2)

El uso de propertyname solo accede a la variable de instancia . Usted es responsable de hacer su propia gestión de memoria en sus contenidos; no se realizan retiros ni liberaciones para usted.

El uso de self.propertyname generalmente usa un self.propertyname acceso . Si usa @synthesize , los @synthesize generados manejarán la administración de memoria como se especifica en su línea @property (el ejemplo que usó usa retain , por lo que se realizará un retener al establecer un nuevo valor en self.propertyname ). También puede escribir sus propios métodos de acceso que hacen la gestión como lo desee.

Una explicación más completa se encuentra en la Guía de programación de administración de memoria . Las mejores prácticas en este caso generalmente son usar @property y @synthesize para manejar sus variables, luego use los self.propertyname para reducir la carga de administración de memoria en usted mismo. La guía también recomienda evitar la implementación de @property personalizados (es decir, al usar @property sin @synthesize ).

¿Cuál es la nce entre acceder a una propiedad a través de "propertyname" versus "self.propertyname" en objective-c? ¿Puedes cubrir en la respuesta?

  1. ¿Cuál es la mejor práctica?
  2. ¿Cómo afectan los dos enfoques la gestión de la memoria (retención de recuentos / responsabilidades de uno para la gestión de la memoria)
  3. Cualquier otra ventaja / desventaja

La suposición para el escenario podría basarse en lo siguiente:

Archivo de cabecera

@interface AppointmentListController : UITableViewController { UIFont *uiFont; } @property (nonatomic, retain) UIFont *uiFont;

Implementación

- (void)viewDidLoad { [super viewDidLoad]; uiFont = [UIFont systemFontOfSize:14.0]; //VERSUS self.uiFont = [UIFont systemFontOfSize:14.0];

Gracias


Una nota adicional: no es tan útil para el iPhone, ya que no hay enlaces en Cocoa Touch. Pero si usa Cocoa, es útil tener en cuenta lo siguiente:

Codificación de clave-valor. KVC es un protocolo utilizado en Cocoa, especialmente en enlaces. En primer lugar, buscará los descriptores de acceso de sus claves y solo accederá a los datos directamente como último recurso. Puede acortar la búsqueda de KVC y agilizar el acceso a los datos mediante la implementación de accesadores.

También tenga en cuenta que si establece variables de instancia directamente, en la forma de var = value, Key-Value Observing no notará el cambio y los objetos enlazados no obtendrán el nuevo valor.