2010-07-31 8 views
17

Quiero definir un protocolo con pocas propiedades y necesito usar esas propiedades en otra subclase NSObject. Por favor dame un enlace o código de ejemplo. Necesito eso para trabajar con 10.5.Cómo definir e implementar propiedades en el protocolo

Gracias favor, compruebe el código de ejemplo siguiente

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

#import "MyProtocol.h" 
@interface MyCustomClass : NSObject <MyProtocol>{ 

} 
@end 

#import "MyCustomClass.h" 
@implementation MyCustomClass 
@synthesize someObject,alive; 

/* 
- (id)someObject { 
    return nil; 
} 

- (BOOL)isAlive { 
    return YES; 
} 

- (void)setAlive:(BOOL)aBOOL { 
} 
*/ 
@end 

** Añadido: código Compling con la arquitectura x86_64 funciona bien. Pero el error si voy a cambiar a la arquitectura i386, entonces yo estoy recibiendo advertencias siguientes:.

MyCustomClass.m:13: error: synthesized property 'someObject' must either be named the same as a compatible ivar or must explicitly name an ivar 

error: synthesized property 'alive' must either be named the same as a compatible ivar or must explicitly name an ivar 

Sólo quiero saber por qué se está trabajando en x86_64 con @synthesize y no en i386 **

Respuesta

33

@property simplemente le dice al compilador que se espera que la clase defina los métodos para hacer coincidir esa propiedad.

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

Cualquier cosa que la aplicación de protocolo de ahora tendrá que tener

- (id)someObject; 
- (BOOL)isAlive; 
- (void)setAlive:(BOOL)aBOOL; 
+9

Sintetizar las propiedades debería funcionar también, ya que instruye al compilador para que proporcione las implementaciones del método de acceso. –

+0

Gracias, su código provisto funciona perfectamente, si mantengo la arquitectura del proyecto en x86_64. Si cambio la arquitectura a i386 entonces estoy recibiendo las siguientes advertencias: MyCustomClass.m: 13: error: la propiedad sintetizada 'someObject' debe ser nombrada igual que un ivar compatible o debe nombrar explícitamente un error ivar : sintetizado la propiedad 'alive' debe tener el mismo nombre que un ivar compatible o debe nombrar explícitamente un ivar Solo quiero saber por qué funciona en x86_64 con @synthesize y no en i386. Gracias – AmitSri

+0

Estoy intentando escribir menos código si es posible. Explíqueme también cuál es la diferencia entre diferentes arquitecturas y cuál supongo que elija compilar la aplicación. – AmitSri

1

Creo que las cosas que nos ocupa son principalmente efectos secundarios de la introducción de Objective-C 2.0. Te permite hacer cosas como declarar propiedades sin definir también vars de instancia. Pero (como habrás descubierto), solo es compatible con x86_64 y post-10.5.

+0

Tengo un error similar. Revisé la casilla "arquitectura activa construida solamente" para x86_64. Lo arregló. – user523234

Cuestiones relacionadas