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
isXcaptador 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
isXcaptadores, pero Xcode no puede enumerarlos en la ventana emergente de finalización automática. (En mi ejemplo)workingaparece allí, peroisWorkingno 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.
@propertyse utiliza con el montón asignadoNSObjectscomoNSString*,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.isWorkinges 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:SetWorkingpara el definidor yIsWorkingpara el accesor.fuente
@propertyestá 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;@propertyLa atomicidad también puede ser ventajosa en esos casos.atomicynonatomic?