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?

Respuestas a la pregunta(5)

Su respuesta a la pregunta