2010-05-04 75 views
8

我試圖使私人財產在我*.m文件:如何製作私人物業?

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

@implementation MyClass 
@synthesize stuff; // not ok 

編譯聲稱,有沒有申報財產的東西。但是有一些東西。只是一個匿名類別。讓我猜猜:不可能。其他方案?

回答

14

你想用一個「類擴展」,而不是一個類別:

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

@implementation MyClass 
@synthesize stuff; // ok 

類擴展是在Objective-C 2.0部分創建專門用於此目的。類擴展的優點是編譯器將它們視爲原始類定義的一部分,因此可以警告不完整的實現。

除了純粹的私有屬性,您還可以創建內部讀寫的只讀公共屬性。一個屬性可以在類擴展中重新聲明,只是爲了改變訪問權限(readonly與readwrite),但在聲明中必須是相同的。因此,你可以這樣做:

//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

而不是重新聲明.m文件中的屬性,而是可以直接編寫代碼,直接設置支持該屬性的隱式變量。該隱式變量具有以下劃線作爲前綴的相同名稱。爲了清楚起見,使用'self'加上一個箭頭(連字符+ RightAngle)來訪問它:self - > _ myProperty = ...任何...; – 2013-08-15 05:18:32