繁体   English   中英

什么是Objective-C“课程延续”?

[英]What is an Objective-C “class continuation”?

我无法弄清楚我所看到的被称为 Objective-C “类继续”的东西 这是/这些......

  1. Ivar(s)在@implementation.m )文件中声明了吗?
  2. 班级类别的另一个名称? (不太可能, ASFAIK类别不能有Ivars,期间)
  3. 类扩展的另一个名称?
  4. 别的什么?

那说......

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

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

延续类是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的合适位置吗? 为什么这个设置ivars或属性的地方比@interface文件/声明更好?

是。 因为您可能想拥有私有属性。

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

嗯,你知道......如果整个世界都说英语,我也会更喜欢,但是暂时我很高兴我必须在学校里学习它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM