En primer lugar, tenga en cuenta que la última versión de Xcode ya no requiere @synthesize. Puedes (y deberías) simplemente omitirlo. Dicho eso, esto es lo que hacen las piezas.
@property
es una declaración de acceso. Es solo una declaración. Hay muy poca diferencia entre lo siguiente:
@property (nonatomic, readwrite, strong) NSString *something;
vs
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
La principal diferencia es que la declaración de estos métodos utilizando @property
permite que el compilador genere automáticamente (sintetizar) las implementaciones para usted. No es necesario que permita que el compilador lo haga por usted. Usted es absolutamente libre de implementar something
y setSomething:
a mano, y es común hacerlo. Pero, si no los implementa a mano, el compilador creará automáticamente un ivar para usted llamado _something
y creará una implementación razonable para el captador y el colocador.
En las versiones anteriores de Xcode, tenía que solicitar explícitamente la autogeneración utilizando la palabra clave @synthesize
. Pero eso ya no es necesario. Hoy, la única razón para usar @synthesize
es si desea que el ivar tenga un nombre no estándar (nunca lo haga).
Un punto clave aquí es que los métodos y something
setSomething:
son sólo métodos . No hay nada mágico sobre ellos. No son métodos especiales de propiedad."Son sólo los métodos que para el acceso a la convención un pedazo de estado que pedazo de estado se almacena a menudo en un Ivar, pero no tiene por qué ser
Para ser aún más claro:.. object.something
hace no media" devolver el Ivar llamado _something
de object
." Esto significa 'devolver el resultado de [object something]
, sea lo que hace.' es común que los que para devolver el valor de una Ivar.
Usted debe declarar la totalidad de su estado (interna y externo) con las declaraciones @property
, y debe evitar declarar directamente ivars. También debe acceder siempre a sus propiedades a través de sus descriptores de acceso (self.something
), excepto en los métodos init
y dealloc
. En init
y dealloc
, debe usar directamente el ivar (_something
).
Piense de esta manera si tiene una '@ propiedad' más que probable que necesite la' @ sintetizar'. Esto es porque sí '@ property' le está diciendo al mundo que se necesitan un' getter' y 'setter' genérico pero que' @ synthesize' en realidad está creando los 'getters' y' setters', puede anular esto y crear su propio 'getters' y' setters' si te gustan como los generados serán muy básicos. Echa un vistazo al desarrollo de aplicaciones de iTunesU 'iPad y iPhone por Paul Hegarty' Esta es la forma en que pienso y aún no ha fallado. – Popeye
Muchas gracias Popeye ... ITunes U es FANTÁSTICO !!! De hecho, estoy en la lección 4 o en la serie de Paul 2011. Solo estoy retrocediendo, leyendo XCode 4 Learning Objective C junto a esta serie ... aún esto no fue explícitamente claro para mí. – RichWalt