8

我不太清楚我所看到的所谓的 Objective-C “类延续”。这是/是这些吗……</p>

  1. @implementation在( ) 文件中声明的 Ivar(s) .m
  2. 类类别的另一个名称?(不太可能,ASFAIK类别不能有 Ivar,句号)
  3. 类扩展的另一个名称?
  4. 还有什么?

那就是说...

  1. 这种东西的范围、生命周期和用例是什么?
  2. 这是 ARC 特有的“功能”吗?
  3. 它们的使用是否有特定的运行时或其他要求?
  4. 这也是创建 的合适地方@property吗?为什么这比@interface文件/声明更适合设置 ivars 或属性?
  5. 为什么人们通过使用这样的特定术语使讨论复杂化——这似乎不存在于任何官方文档(我能找到)中?

有问题在Objective-C中,在头文件中定义某些东西(比如属性)与在.m文件中定义有什么区别? 讨论涉及到这个问题,但有点只是进一步混淆了这个问题 - 或者至少没有提供该术语的规范参考/定义......因此这个问题。

4

1 回答 1

7

延续类是Apple 所说的类扩展。我见过 clang 称它们为“延续类”,而 gcc 使用“类延续”。

在 clang 或 gcc 中编译:

@interface Foo : NSObject
@property int a;
@end

@interface Foo()
@property float a;
@end

...你会得到有趣的名字的错误。

要回答您的其余问题:

  1. 这种东西的范围、生命周期和用例是什么?

扩展用于声明类的私有接口。您还可以使用它来重新声明(优化)公共属性声明。

  1. 这是 ARC 特有的“功能”吗?

不。

  1. 它们的使用是否有特定的运行时或其他要求?

类扩展是一个编译时概念,不需要特殊的运行时。当然,它们确实需要一个支持它们的编译器(clang 和 gcc 在当前版本中都支持)。

  1. 这也是创建@property 的合适位置吗?为什么这比 @interface 文件/声明更适合设置 ivars 或属性?

是的。因为您可能想要拥有私有财产。

  1. 为什么人们通过使用这样的特定术语使讨论复杂化——这似乎不存在于任何官方文档(我能找到)中?

嗯,你知道...如果全世界都说英语,我也更喜欢,但目前我很高兴我必须在学校学习英语。

于 2012-04-24T16:12:28.330 回答