descargar - Necesita explicación en @ propiedad/@ sintetizar en iOS
itunes (2)
Esta es una característica del lenguaje que ha tenido su uso evolucionar rápidamente en los últimos años, lo que explica las diversas formas. Con las herramientas más recientes, puede optar por ignorar @synthesize
y hacer que las cosas funcionen de manera razonable.
El comportamiento predeterminado en ese caso produce el mismo efecto que @synthesize list = _list;
.
No es un noob completo. Soy bastante nuevo en la programación de iOS y en Ojbective-C. Principalmente procedo de un entorno de C (DSP, microcontroladores), Delphi XE2 / Pascal, Visual Basic y Java (aplicaciones de escritorio y Android).
Principalmente aprendí Cocoa con el libro "Beginning iOS 5 Development", de Apress.
Recientemente miré videos de la WWDC 2012 y revisé algunos de sus códigos de muestra, y debo decir que no estoy seguro de cuál es la forma correcta de escribir mis aplicaciones y más específicamente con las palabras @ property / @ sintetizar.
En el libro, la mayoría (por no decir todo) del código de muestra utiliza para definir una propiedad como, por ejemplo,
ViewController.h
@property (strong, nonatomic) NSMutableArray *list;
ViewController.m
@synthesize list;
A continuación, todos los códigos de acceso sintetizan la lista con
self.list
o incluso simplemente
list
Ahora en cada muestra de código WWDC que leo veo que los programadores definen una propiedad pero luego, en el archivo .m hacen cosas como
@synthesize list = _list;
y acceso a veces
self.list
o
_list
Estoy confundido. ¿Cuál es la práctica correcta? Como los programadores de Apple usan subrayado, creo que debería hacerlo de esa manera, pero ¿por qué el libro no? ¿Hay alguna diferencia entre list y _list? Y más, ya que estoy en el mismo objeto, ¿por qué alguna vez usar self.list y, a veces, list / _list?
A veces no usan @synthesize, asumo que es cuando quieren volver a escribir sus propios accesores y mutadores (que nunca es mi caso hasta ahora).
He leído aquí y allá en la web pero nada fue lo suficientemente claro como para aclarar mi mente, así que cuento con StackOverflow para traer luz aquí.
Por último, prefiero y respondo según la mejor práctica / técnica de programación actual de iOS 6. Inútil decirme cómo hacerlo correctamente en iOS más antiguo.
No hay forma correcta. Solo hay tu estilo preferido.
Los compiladores más recientes realizan un sintetizador implícito en la declaración de propiedad.
@synthesize list = _list;
.
Nada está escrito en tu código. Solo pasa.
Sin embargo, eso no te impide hacer esto explícitamente.
@synthesize list = somethingelse;
Entonces cuando pides un puntero para list
través del self.list
acceso ( self.list
) obtendrás un puntero para self.list
En la mayoría de los casos, NSMutableArray *thing = self.list
es equivalente a NSMutableArray *thing = somethingelse
Y solo porque Apple use un estilo no significa que tengas que hacerlo. Cada compañía generalmente tiene su propio estilo de codificación.
El principal problema con el uso de la @synthesize list;
es que plantea el riesgo de que puedas escribir
self.list = thing
o list = thing
.
El primero usa el setList setList:
accessor mientras que el segundo no lo hace y pone en riesgo el riesgo de errores relacionados en su código, aunque no es tan malo con ARC
ya que no se producen fugas por propiedades strong
.
Independientemente del estilo que use, manténgalo consistente y tenga en cuenta los efectos de usar ivar directamente list = thing
en comparación con el uso de accessor self.list = thing