2010-05-04 18 views
8

he intentado hacer una propiedad privada en mi archivo *.m:¿Cómo hacer una propiedad privada?

@interface MyClass (Private) 
@property (nonatomic, retain) NSMutableArray *stuff; 
@end 

@implementation MyClass 
@synthesize stuff; // not ok 

Compilador afirma que no hay ninguna propiedad material declarado. Pero hay algunas cosas. Solo en una categoría anónima. Déjame adivinar: Imposible. Otras soluciones?

Respuesta

14

que desea utilizar una "extensión de clase" en lugar de una categoría:

@interface MyClass() 
@property (nonatomic, retain) NSMutableArray *stuff; 
@end 

@implementation MyClass 
@synthesize stuff; // ok 

extensiones de clase fueron creados en Objective-C 2.0, en parte, específicamente para este propósito. La ventaja de las extensiones de clase es que el compilador las trata como parte de la definición de clase original y, por lo tanto, puede advertir sobre implementaciones incompletas.

Además de las propiedades puramente privadas, también puede crear propiedades públicas de solo lectura que sean de lectura y escritura internamente. Una propiedad puede volverse a declarar en una extensión de clase únicamente para cambiar el acceso (solo lectura contra escritura) pero debe ser idéntica en la declaración en caso contrario. De esta forma puede hacer:

//MyClass.h 
@interface MyClass : NSObject 
{ } 
@property (nonatomic,retain,redonly) NSArray *myProperty; 
@end 

//MyClass.m 
@interface MyClass() 
@property (nonatomic, retain, readwrite) NSArray *myProperty; 
@end 

@implementation MyClass 
@synthesize myProperty; 
//... 
@end 
+0

En lugar de volver a declarar la propiedad en el archivo .m, puede simplemente escribir el código que establece directamente la propiedad de respaldo de la variable implícita. Esa variable implícita tiene el mismo nombre precedido por un guión bajo. Para mayor claridad, acceda utilizando 'self' más una flecha (guión + ángulo derecho): self -> _ myProperty = ... lo que sea ...; –

Cuestiones relacionadas