2010-02-11 10 views

risposta

30

prima dichiarare una "proprietà privata" utilizzando il metodo di estensione classe standard:

// VisualNotePlayer.h 
@interface VisualNotePlayer : NSObject<NotePlayer>{ 
    @private 
    UIView *_currentView; 
} 

// VisualNotePlayer.m 
@interface VisualNotePlayer() 
@property (nonatomic, retain) UIView *currentView; 
@end 

@implementation VisualNotePlayer 
@synthesize currentView=_currentView; 
... 
@end 

quindi ricreare la proprietà di una categoria:

// VisualNotePlayer+Views.h 
@interface VisualNotePlayer(Views) 
@property (nonatomic, retain) UIView *currentView; 
@end 

Questa interfaccia è accessibile solo a coloro che importano VisualNotePlayer+Views.h

+0

Ah ... Quindi è necessario disporre di diversi file .h per la stessa classe in modo efficace. –

5

Non esiste una classe di amici in ObjC.

E per accedere a una variabile privata di un'altra classe non è nemmeno necessario essere dichiarati come amici. Ad esempio, è possibile utilizzare le funzioni di runtime

id the_private_ivar; 
object_getInstanceVariable(the_object, "_ivar_name", &the_private_ivar); 

per ottenere the_object->_ivar_name, bypassando i controlli del compilatore.

Problemi correlati