objective-c ios properties

objective c - Usando una propiedad BOOL



objective-c ios (3)

Apple recomienda declarar una propiedad BOOL de esta manera:

@property (nonatomic, assign, getter=isWorking) BOOL working;

Como uso las propiedades de Objective-C 2.0 y la notación de puntos, self.working esta propiedad usando self.working . Sé que también podría usar [self isWorking] , pero no es necesario.

Entonces, como uso la notación de puntos en todas partes, ¿por qué debería definir una propiedad adicional? ¿Estaría bien simplemente escribir

@property (nonatomic, assign) BOOL working;

¿O tengo algún beneficio escribiendo getter=isWorking en mi caso (uso de notación de puntos)?

¡Gracias!


Apple recomienda con fines estilísticos. Si escribe este código:

@property (nonatomic,assign) BOOL working;

Entonces no puedes usar [object isWorking].
Mostrará un error. Pero si usa el siguiente código significa

@property (assign,getter=isWorking) BOOL working;

Entonces puedes usar [object isWorking].


Apple simplemente recomienda declarar un isX getter con fines estilísticos. No importa si personaliza o no el nombre getter, siempre que utilice la notación de punto o la notación de mensaje con el nombre correcto. Si vas a utilizar la notación de puntos, no importa, todavía tienes acceso al nombre de la propiedad:

@property (nonatomic, assign) BOOL working; [self setWorking:YES]; // Or self.working = YES; BOOL working = [self working]; // Or = self.working;

O

@property (nonatomic, assign, getter=isWorking) BOOL working; [self setWorking:YES]; // Or self.working = YES;, same as above BOOL working = [self isWorking]; // Or = self.working;, also same as above


No hay beneficio al usar propiedades con tipos primitivos. @property se utiliza con NSObjects asignados en montón como NSString* , NSNumber* , UIButton* y etc., ya que los UIButton* gestionados de memoria se crean de forma gratuita. Cuando crea un BOOL , el valor siempre se asigna en la pila y no requiere ningún acceso especial para evitar la pérdida de memoria. isWorking es simplemente la forma popular de expresar el estado de un valor booleano.

En otro idioma OO, haría funcionar un private bool working; variable private bool working; y dos SetWorking : SetWorking para el setter e IsWorking para el accessor.