Apple recomienda para declarar un tipo BOOL propiedad de esta manera:

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

Como estoy usando Objective-C 2.0 y propiedades de la notación de punto, puedo acceder a esta propiedad mediante self.working. Sé que yo también podría utilizar [self isWorking] — pero no tengo a.

Así que, como estoy usando la notación de punto en todas partes, ¿por qué debería definir una propiedad adicional? Sería bueno escribir simplemente

@property (nonatomic, assign) BOOL working;

O tengo ninguno de los beneficios de la escritura getter=isWorking en mi caso (uso de la notación de punto)?

Gracias!

  • No es esto una semántica basada en la recomendación? así myCar.isWorking sería semánticamente más preciso que el de myCar.de trabajo
InformationsquelleAutor Patrick | 2011-02-01

3 Comentarios

  1. 202

    De Apple simplemente se recomienda declarar una isX getter para propósitos estilísticos. No importa si usted personalizar el captador de nombre o no, siempre y cuando se utiliza la notación de punto o mensaje de notación con el nombre correcto. Si vas a utilizar la notación de punto no hace ninguna diferencia, usted acceder a ella por el 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
    • Sin duda, su que ver más con el valor de la clave de codificación compatible que sólo propósitos estilísticos?
    • Es un poco extraño que Apple recomienda declarar los isX captadores pero Xcode es no capaz de hacer una lista de ellos en la auto-realización emergente. (En mi ejemplo) working está en la lista, pero isWorking no lo es. Así que no veo ningún beneficio en la declaración de BOOL captadores. Tengo que hacer más para ser capaces de utilizarlos (declarar el getter) pero me da menos (no auto-realización).
  2. 4

    Apple recomienda para propósitos estilísticos.Si usted escribe este código:

    @property (nonatomic,assign) BOOL working;

    Entonces usted no puede utilizar [objeto isWorking].

    Se mostrará un error. Pero si utilizar a continuación el código significa

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

    Así que usted puede utilizar [objeto isWorking] .

  3. -26

    Hay ningún beneficio para el uso de propiedades con los tipos primitivos. @property se utiliza con el montón asignado NSObjects como NSString*, NSNumber*, UIButton*, y etc, porque la memoria administrada descriptores de acceso se crean de forma gratuita. Cuando se crea un BOOL, el valor siempre se almacena en la pila y no requiere ningún tipo especial de descriptores de acceso a prevenir la pérdida de memoria. isWorking es simplemente la forma popular de expresar el estado de un valor booleano.

    En otra OO de idiomas que sería una variable private bool working; y dos descriptores de acceso: SetWorking para el setter y IsWorking para el descriptor de acceso.

    • No estás respondiendo a su pregunta, a saber, ¿cuál es el propósito de nombrar explícitamente captador de algo distinto a la propiedad (que no es pedir si las propiedades son una buena idea). También, propiedades permiten KVO y KVC, por lo que el punto de hacer es engañosa.
    • Tienes razón que se me pasa por alto el uso de KVO y KVC con propiedades primitivas. Creo que todos en el hilo se dirigía a su pregunta sobre isWorking – es una convención de nomenclatura.
    • Esto es totalmente incorrecto; @property es muy indicado para ser utilizado con los tipos primitivos y, para simplificar de la coherencia por sí sola, tiene ventajas significativas. Además, algunos tipos primitivos (64 bits tipos en algunos de los 32 bits de la Cpu y de 128 bits de tipos en muchos de 32 y 64 bits Cpu) no son atómica en la asignación; @property‘s atomicidad puede ser ventajoso en esos casos, demasiado.
    • Muy interesante – pero, ¿cómo diablos se supone que voy a saber eso? 🙂 Es este un implícitamente de la atomic y nonatomic atributos?

Dejar respuesta

Please enter your comment!
Please enter your name here