我没有什么特别要实现的,但我正在尝试更多地了解类扩展。
这是直接来自苹果类别和扩展的类扩展的解释:
@interface MyClass : NSObject
@property (retain, readonly) float value;
@end
// Private extension, typically hidden in the main implementation file.
@interface MyClass ()
@property (retain, readwrite) float value;
@end
但是,假设我有一个扩展 MyClass 的 MyClass2,这对我来说确实很有意义:
@interface MyClass2 : MyClass
@property (retain, readwrite) float value;
@end
所以我有几个问题,如果不涉及类扩展,我可以很容易地回答:
- 在运行时,当我在MyClass中进行赋值self.value=2或只是调用float x=self.value时,调用了哪个 setter 和 getter @property?MyClass 还是 MyClass2 ?
- 编译器不应该至少发出关于重新定义只读属性的警告吗?
- 我知道@property 由 ivar 支持,那么到底有多少 ivar?与此相关,从MyClass2的角度调用相同的 self.value 哪个 ivar 会设置?