【发布时间】:2012-11-11 02:23:43
【问题描述】:
我没有什么特别要实现的,但我正在尝试了解更多关于类扩展的信息。
这是直接来自apple Categories and extensions的类扩展的解释:
@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
这对我来说确实很有意义,但是,假设我有一个 MyClass2 扩展 MyClass:
@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 会设置?
【问题讨论】:
-
请不要将我的答案标记为正确。我最初给出了错误的答案,直到 Martin R 纠正我之后才更正它。
标签: objective-c class-extensions