【问题标题】:An Objective-C class extension header - for what?一个 Objective-C 类扩展头文件——为了什么?
【发布时间】:2012-08-11 17:37:52
【问题描述】:

我熟悉类主实现文件中的 Objective-C 类扩展,但对新的 Xcode 4.4“An Objective-C 类扩展头”文件模板的用途感到好奇?

【问题讨论】:

  • 欢迎使用 StackOverflow 和第一个问题!

标签: objective-c xcode


【解决方案1】:

类扩展必须在主 @implementation 块中实现,但声明可以在任何地方。

扩展用于向类接口添加您不想公开的内容,因此不能放入公共类声明头中。

在您熟悉的实现的同一文件中声明扩展名,用于仅由类实现本身使用的扩展名。

在单独的标头中声明扩展,这是模板的用途,在开发框架时很有用。扩展头不会成为公共头集的一部分,但会被多个框架的实现文件在内部使用。

您可以将其视为框架私有,而不是类私有

【讨论】:

  • +1 您可以将其视为框架私有而不是类私有。
  • 还有另一个主要动机;类扩展允许类将@property 宣传为readonly,然后在内部将其提升readwrite。传统类别明确不允许这样做。
  • 是的。问题是关于将 promotion 放入标头而不是在实现文件中执行的原因。框架范围的访问以及正如 aleroot 所说的测试用例访问是它可能有用的示例。
【解决方案2】:

另一个原因是类扩展头文件在你使用单元测试来测试你的类的情况下很有用,把类扩展放在一个单独的头文件允许您将包含私有方法的标头导入需要这些私有方法的类的实现以及用于测试该类的单元测试文件中 ...

在我看来,这是对 Objective-C 的一个很好的补充(在单元测试中测试私有方法的机会),这是目前 Java 中的 JUnit 无法做到的。

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多