Antes de discutir sobre los atributos de @property, usted debe saber lo que es el uso de @property. @property ofrece una manera de definir la información que una clase está destinado a encapsular. Si se declara un objeto / variable usando @property, entonces ese objeto / variable será accesible a otras clases importadores de su clase. Si se declara un objeto utilizando @property en el archivo de cabecera, entonces usted tiene que sintetizar usando @synthesize en el archivo de implementación.
Ejemplo:
clase .h
@interface ExampleClass : NSObject
@property (nonatomic, retain) NSString *name;
@end
clase .m
@implementation ExampleClass
@synthesize name;
@end
Ahora el compilador sintetizar métodos de acceso para el nombre.
ExampleClass *newObject=[[ExampleClass alloc]init];
NSString *name1=[newObject name]; // get 'name'
[obj setName:@“Tiger”];
Lista de los atributos de @property: atómica. no atómica. conservar. dupdo. solo lectura. leer escribir. asignar. fuerte.
atómico: Es el comportamiento por defecto. Si un objeto se declara como atómica entonces se convierte en seguro para subprocesos. medios de rosca de seguridad, a la vez sólo un hilo de una instancia determinada de esa clase pueden tener el control sobre ese objeto.
Ejemplo:
@property NSString *name; //by default atomic
@property (atomic)NSString *name; // explicitly declared atomic
no atómica: No es seguro para subprocesos. Puede utilizar el atributo de propiedad no atómica para especificar que los descriptores de acceso sintetizados simplemente establecer o devolver un valor directamente, sin ninguna garantía sobre lo que ocurre si se accede a ese mismo valor de forma simultánea desde diferentes hilos. Por esta razón, es más rápido acceder a una propiedad no atómica que un uno atómica.
@property (nonatomic)NSString *name;
retener: se requiere cuando el atributo es un puntero a un método setter object.The aumentará retener el recuento del objeto, por lo que va a ocupar memoria en la piscina autorelease.
@property (retain)NSString *name;
copia: Si usted usa la copia, no se puede utilizar retener. Usando ejemplo, copia de la clase contendrá su propia copia. Incluso si una cadena mutable se establece y posteriormente cambió, la instancia de captura cualquier valor que tiene en el momento en que se establece. se sintetizarán No hay setter y getter métodos.
@property (copy) NSString *name;
NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];
xyzObj.name = nameString;
[nameString appendString:@"Pizza"];
de sólo lectura: Si no desea permitir la propiedad de ser cambiado a través de método de selección, se puede declarar la propiedad de sólo lectura.
@property (readonly) NSString *name;
lectura-escritura: es el comportamiento por defecto. No es necesario especificar el atributo de lectura-escritura de forma explícita.
@property (readwrite) NSString *name;
asignar: generará un colocador que asigna el valor de la variable de instancia directamente, en lugar de copiar o retenerlo. Este es el mejor para los tipos primitivos como NSInteger y CGFloat, u objetos que no posee directamente, como delegados.
@property (assign) NSInteger year;
fuerte: es un reemplazo para retener.
@property (nonatomic, strong) AVPlayer *player;
unsafe_unretained: Hay algunas clases en Cocoa y Cocoa Touch que aún no admiten referencias débiles, lo que significa que no se puede declarar una propiedad débil o débil variable local para realizar un seguimiento de ellos. Estas clases incluyen NSTextView, NSFont y NSColorSpace, etc. Si es necesario utilizar una referencia débil para una de estas clases, debe utilizar una referencia inseguro. Una referencia inseguro es similar a una referencia débil, ya que no mantiene su objeto relacionado con vida, pero no se establecerá a cero si se cancela la asignación del objeto de destino.
@property (unsafe_unretained) NSObject *unsafeProperty;