2011-02-15 102 views
56

我想使用@property语法来声明一个公开只读的综合属性,但它有一个可以在类中被私有调用的setter。Objective-C属性公开只读,但有一个私有setter

由于它是Objective-C,这基本上意味着setFoo:方法将被合成,但将其称为类外本身会导致警告(无法识别的选择器)。要触发警告,我必须声明属性readonly;有没有办法强制一个只能在类中使用的合成setter?

回答

87

我认为你要找的是类扩展。你会读,只在头财产申报:

@interface MyClass : NSObject { 
} 

@property (readonly, assign) NSInteger myInteger; 

@end 

然后在您的类扩展实现文件中重新声明:

@interface MyClass() 

@property (readwrite, assign) NSInteger myInteger; 

@end 


@implementation MyClass 

@end 

详细检查了苹果公司的documentation

+1

你是正确的,另请参阅http://stackoverflow.com/questions/743586/synthesizing-properties-in-categories/3251621#3251621 – 2011-02-15 19:17:06