ios - ¿Debería declarar variables en la interfaz o usar la propiedad en Object-C Arc?
objective-c automatic-ref-counting (2)
La forma más moderna 1 :
- siempre que sea posible, declare las propiedades
- no declare iVars por separado 2
- no @synthesize 3
- localice la menor cantidad posible de propiedades en su archivo .h 4
- localice tantas propiedades como sea posible en una extensión de clase en su archivo .m 5
1 A partir de Xcode 4.5.2. La mayor parte de esto se aplica a 4.4, parte de la cual no se compilará en 4.2 (la última versión disponible bajo Snow Leopard). Esto es un preprocesador, por lo que todo es compatible al menos con iOS5 (no lo he probado en iOS4 pero también debería estar bien).
2 No tiene sentido declarar un iVar tan bien como una propiedad. Estoy seguro de que hay algunos casos poco claros en los que desearía declarar iVars en lugar de propiedades, pero no puedo pensar en ninguno.
3 Xcode creará un iVar con el mismo nombre que la propiedad, precedido por un _underscore. Si (raramente) necesita algún otro tipo de comportamiento, puede @synthesize property = someOtherName
. @vikingosegundo nos vincula a este artículo sobre ivars dinámicos , que es un caso de uso para @synthesize
. @RobNapier comenta que necesita @synthesize iVar = _iVar
(extrañamente) si está creando sus propios getters (solo lectura) y setters (lectura / escritura) para una propiedad, ya que en este caso el preprocesador no generará el iVar para usted .
4 La regla general con su interfaz: manténgala tan vacía como sea posible. En realidad, no necesita declarar sus métodos ahora, si son para uso privado. Si puede lograr que el código funcione sin una declaración de interfaz, ese es el camino a seguir.
5 Este es un bloque de interfaz @ en su archivo .m, ubicado encima de su @implementation:
#TestClass.m
@interface TestClass()
//private property declarations here
@end
@implementation TestClass
...
enfoque 1:
@interface MyController : UIViewController {
UILabel *myText;
}
@property (nonatomic, strong) UILabel *myText;
enfoque 2:
@interface MyController : UIViewController
@property (nonatomic, strong) UILabel *myText;
enfoque 3:
@interface MyController : UIViewController {
UILabel *myText;
}
He leído algunos artículos sobre este tipo de cosas, pero todavía no me doy cuenta de qué enfoque debo adoptar.
También encontré que alguien dijo que el enfoque 1 es antiguo, por lo que me gustaría conocer las mejores prácticas para iOS 6 utilizando ARC.
Sé que declarar variables usando propiedad es una manera fácil de generar getter y setter y alguien sugirió usarlo. Sin embargo, me gustaría preguntar en caso de que una variable no sea para llamar por otra clase, ¿es necesario que la variable use la propiedad? y establecerlo como una variable privada dentro de la interfaz? ¿O es mejor para una variable que solo declara dentro de la interfaz? Me gustaría aprender la mejor práctica así que por favor, perdónenme si esta es una pregunta tonta.
Además, algunos desarrolladores escriben @synthesize de esta manera
@synthesize myText=_myText;
pero algunos escriben esto:
@synthesize myText;
También me gustaría saber la diferencia y cuál es preferible.
¡Muchas gracias!
También puede usar @synthesize si le gusta una buena tabla de contenidos de sus propiedades @synthesized a la que puede hacer referencia y hacer comentarios para mayor claridad y organización.
Además, un @synthesize le permite establecer un punto de interrupción en la propiedad y atrapar cuando se cambia su valor.
Cuando el compilador hace todo por ti, terminas distanciándote de lo que realmente está sucediendo e ignorándolo. Sin embargo, no tener que escribir todo usted mismo todo el tiempo también es bueno.