Apple recomienda declarar una propiedad BOOL de esta manera:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Como estoy usando las propiedades de Objective-C 2.0 y la notación de puntos, accedo a esta propiedad usando self.working
. Sé que yo también podría usar[self isWorking]
, pero no es necesario.
Entonces, como estoy usando 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!
objective-c
ios
properties
Patricio
fuente
fuente
Respuestas:
Apple simplemente recomienda declarar un
isX
captador por motivos de estilo. No importa si personaliza el nombre del captador o no, siempre que utilice la notación de puntos o la notación de mensaje con el nombre correcto. Si va a usar la notación de puntos, no hay diferencia, aún puede acceder a ella por el nombre de la propiedad:O
fuente
isX
captadores, pero Xcode no puede enumerarlos en la ventana emergente de finalización automática. (En mi ejemplo)working
aparece allí, peroisWorking
no lo está. Así que no veo ningún beneficio en declarar captadores BOOL. Tengo que hacer más para poder usarlos (declarar el getter) pero obtengo menos (sin autocompletar).Apple recomienda con fines estilísticos. Si escribe este código:
Entonces no puede usar [object isWorking].
Mostrará un error. Pero si usa el siguiente código significa
Entonces puede usar [object isWorking].
fuente
No hay ningún beneficio al usar propiedades con tipos primitivos.
@property
se utiliza con el montón asignadoNSObjects
comoNSString*
,NSNumber*
,UIButton*
, y etc, porque descriptores de acceso de memoria administrada se crean de forma gratuita. Cuando crea unBOOL
, el valor siempre se asigna en la pila y no requiere ningún acceso especial para evitar pérdidas de memoria.isWorking
es simplemente la forma popular de expresar el estado de un valor booleano.En otro lenguaje OO, haría una variable
private bool working;
y dos accesos:SetWorking
para el definidor yIsWorking
para el accesor.fuente
@property
está destinado a ser utilizado con tipos primitivos y, solo por motivos de coherencia, tiene ventajas significativas. Además, algunos tipos primitivos (tipos de 64 bits en algunas CPU de 32 bits y tipos de 128 bits en muchas CPU de 32 y 64 bits) no son atómicos en la asignación;@property
La atomicidad también puede ser ventajosa en esos casos.atomic
ynonatomic
?