2010-07-31 9 views
17

Voglio definire un protocollo con poche proprietà e ho bisogno di usare quelle proprietà in un'altra sottoclasse NSObject. Per favore dammi il link o il codice di esempio. Ho bisogno che funzioni con 10.5.Come definire e implementare le proprietà nel protocollo

Grazie VERIFICARE seguente codice di esempio

@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 

** Aggiunto: codice compling con l'architettura x86_64 funziona bene. Ma errore se cambierò l'architettura per i386, poi io sono sempre seguenti avvertenze:.

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 

Voglio solo sapere perché si sta lavorando in x86_64 con @synthesize e non in i386 **

risposta

33

@property dice semplicemente al compilatore che la classe deve definire i metodi per abbinare quella proprietà.

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

Tutto attuazione di tale protocollo avrà ora bisogno di avere

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

Anche la sintesi delle proprietà dovrebbe funzionare, poiché istruisce il compilatore a fornire le implementazioni del metodo accessor. –

+0

Grazie, il codice fornito funziona perfettamente, se tengo l'architettura del progetto su x86_64. Se cambio l'architettura in i386, ricevo i seguenti avvertimenti: MyCustomClass.m: 13: errore: la proprietà sintetizzata 'someObject' deve essere denominata uguale a un ivar compatibile o deve denominare esplicitamente un ivar errore: sintetizzato la proprietà 'alive' deve essere denominata come un ivar compatibile o deve denominare esplicitamente un ivar Voglio solo sapere perché funziona in x86_64 con @synthesize e non in i386. Grazie – AmitSri

+0

Sto provando a scrivere meno codice se possibile. Per favore, spiegami anche qual è la differenza tra le diverse architetture e quali dovrei scegliere per compilare l'applicazione. – AmitSri

1

Penso che le cose hai a che fare con gli effetti sono in primo luogo collaterali dell'introduzione di Objective-C 2.0. Ti permette di fare cose come dichiarare le proprietà senza anche definire le vars delle istanze. Ma (come hai scoperto), è compatibile solo con x86_64 e post-10.5.

+0

Ho un errore simile. Ho controllato la casella "built active architecture only" per x86_64. Lo ha risolto – user523234

Problemi correlati