Definición de miembros y properties en Xcode 4 y iOS 4

Estoy bastante avanzado desarrollando un primer proyecto de iPhone razonablemente ambicioso y estoy confundido en cuanto a la forma de implementar y acceder a las properties y por qué.

Ejemplo 1: (en la .h)

Nsstring *_sale; @property (nonatomic, retain) NSString *sale; 

(en ellos)

 @synthesize sale = _sale; 

Ejemplo 2: (en la .h)

 @property (nonatomic, retain) NSString *sale; 

(en ellos)

 @synthesize sale; 

Ambos parecen funcionar sin problemas, pero estoy tratando de averiguar por qué hay dos forms de hacer esto y qué beneficios puede tener.

¿Alguien puede decirme la diferencia?

El ejemplo 1 demuestra la antigua forma de definir pares de variables de ivar / propiedad. El nuevo comstackdor ahora genera ivars (la parte de NSstring *_sale; ) para ti. El Ejemplo 1 también demuestra emparejamiento manual de la sale properties a la venta _sale utilizando la @synthesize sale = _sale; statement.

El Ejemplo 2 es una forma más concisa de implementar properties en Obj-C y es la forma en que verá la mayoría de los códigos de ejemplo en Internet. La gran mayoría del time puede escribir sus properties sin necesidad de sobrescribir los methods de acceso / mutator generados para usted por el comstackdor.

Hay algunos partidarios a la defensiva del prefijo de subrayado para denotar variables de instancia por razones de claridad. Puede encontrar que esto le ayuda en lo que respecta a la gestión de la memory, como en el ejemplo 1, establecer self.sale igual a NSString autoreleased estaría bien, ya que sería retenido, pero establecer _sale igual a un object autoeleased daría lugar a un comportamiento errático más adelante, porque la variable de instancia no retendría el NSString pasado.

En general, prefiero escribir mis properties como se muestra en el ejemplo 2.

Respuesta corta : hay dos forms de hacerlo porque el nuevo comstackdor ahora puede inferir algunas cosas para ti, pero la forma anterior de hacer las cosas se ha dejado para la compatibilidad hacia atrás.

Ambos trabajan de la misma manera. Algunas personas prefijan su variable de instancia con un subrayado como una indicación visual para diferenciar las variables de los miembros de las variables de instancia.

Más discusión en esta pregunta SO: ¿Cómo funciona un subrayado frente a una variable en una class de cocoa objective c?

Para get más directrices sobre el estilo de cocoa, visite CocoaDevCentral .