2

我的一门课MyClass很大,我想把它分成几类MyClass(A),,, MyClass(B)...。我的问题是某些方法MyClass+A使用@property了类扩展中定义的一个MyClass()

  • 我可以从类别中访问它吗?如果可以:如何访问?

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

4

2 回答 2

4

我可以从类别中访问它吗?如果可以:如何访问?

是的。任何一个:

  1. 在不同的 .h 文件 (xxx_Private.h) 中定义延续类别并将其包含到您的实现文件中
  2. 或者,在实现文件顶部的类别接口中重新定义方法。

选项 1 是更好的解决方案。

于 2014-04-08T18:54:45.210 回答
1

您可以在私有标头中声明该属性或按照已建议的方式重新定义它。以下方法有时也适用:

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

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

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

  4. 使用 NSInvocation

键值编码很常见。其他的将更适用于库和框架,但如果需要,您当然可以使用它们。

于 2014-04-08T19:19:05.957 回答