在Objective-C中从类别访问类扩展中定义的属性:是否可能?

时间:2014-04-08 18:51:52

标签: objective-c properties objective-c-category class-extensions

我的其中一个课程MyClass非常大,我想将其分为几个类别MyClass(A)MyClass(B),....我的问题是MyClass+A的某些方法使用了类扩展@property中定义的MyClass()

  • 我可以从类别中访问它吗?如果是的话:怎么做?

  • 如果不是,还有其他方法可以继续吗?

2 个答案:

答案 0 :(得分:4)

  

我可以从类别中访问它吗?如果是,那该怎么办?

是。之一:

  1. 在不同的.h文件(xxx_Private.h)中定义延续类别,并将其包含在您的实施文件中
  2. 或者,在实现文件顶部的类别界面中重新定义方法。
  3. 选项1是更好的解决方案。

答案 1 :(得分:1)

您可以在私有标头中声明属性,也可以按照建议重新定义它。此外,以下方法有时也适用:

  1. 使用ObjectiveC运行时:id objc_msgSend(id self,SEL op,...)。使用原始类型或结构时应小心。

  2. 使用键值编码:[someObject setValue:aValue forKey:@" propertyName"];

  3. 使用performSelector:[someObject performSelector:@selector(setFoobar)。 。 。 ],请注意,这将在ARC

  4. 下发出警告
  5. 使用NSInvocation

  6. 键值编码非常常见。其他更适用于库和框架,但如果需要,你当然可以使用它们。