Objective-C属性是公开只读的,但是有一个私有的setter

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

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

我认为你要找的是类扩展。 您将在标题中声明属性只读:

 @interface MyClass : NSObject { } @property (readonly, assign) NSInteger myInteger; @end 

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

 @interface MyClass () @property (readwrite, assign) NSInteger myInteger; @end @implementation MyClass @end 

更多检查苹果的文档