什么是Objective-C"课程延续"?

Ale*_*ray 7 variables syntax class objective-c automatic-ref-counting

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

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

那说......

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

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

Nik*_*uhe 7

一个补习班就是苹果称之为一个类扩展.我看到clang称他们为"继续课",gcc使用"课程延续".

在clang或gcc中编译它:

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

@interface Foo()
@property float a;
@end
Run Code Online (Sandbox Code Playgroud)

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

要回答你的其余问题:

  1. 这样的事情的范围,生命周期和使用情况是什么?

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

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

没有.

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

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

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

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

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

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