Propiedades y variables de instancia en Objective-C
Estoy bastante confundido acerca de las propiedades y variables de instancia en Objective-C.
Estoy a mitad de camino a través de "Cocoa Programming para Mac OS X" de Aaron Hillegass y todo es lógico. Usted declararía una clase como esta:
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
Dado que otros objetos necesitan manipular nuestrosname
yitems
variables de instancia, usamos@property
/@synthesize
Para generar accesores / mutadores para ellos. Dentro de nuestra clase, no usamos los accesores / mutadores, simplemente interactuamos con la variable de instancia directamente.
something
es solo una variable de instancia que vamos a utilizar en nuestra clase, y como nadie más necesita usarla, no creamos un par de elementos de acceso y mutadores para ella.
Necesitamos interactuar con un campo de texto en nuestra interfaz de usuario, por lo que declaramos unIBOutlet
Para ello, conéctalo, y hemos terminado.
Todo muy lógico.
Sin embargo, en el mundo del iPhone, las cosas parecen ser diferentes. La gente declara propiedades para cada variable de instancia única, declara propiedades paraIBOutlets
, y usar accessors / mutators para interactuar con variables de instanciadentro la clase (por ejemplo, escribirían[self setName:@"Test"]
más bien quename = @"Test"
).
¿Por qué? Que esta pasando? ¿Son estas diferencias específicas de iPhone? ¿Cuáles son las ventajas de declarar propiedades para todas las variables de instancia, declarar propiedades paraIBOutlets
, y usando accesores / mutadores dentro de su propia clase?