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