.m文件中用于空的@interface声明是什么?

我已经开始了一个新的iOS 5项目,并注意到每个.m文件顶部的新东西

#import "HomeViewController.h" @interface HomeViewController () @end @implementation HomeViewController @synthesize ... 
  • 这是额外的@界面…如果我有一个单独的.h文件需要?
  • 为什么这不会出现在iOS 5项目之前?
  • 我可以使用这个,而不是有一个单独的.h文件?
  • 今后的最佳做法是什么?

这是一个类扩展 。 您可以使用它来声明您不希望在.h文件中的声明。

许多开发人员甚至在手动将该扩展名添加到.m文件中之前都使用过这种方法。 所以我想苹果公司把它包含在模板中,因为它被广泛使用,被认为是一个好的做法。

实际上, .h文件只能用于从其他文件中使用声明。 您可能需要声明一些只会在.m文件中使用的属性,方法或常量。 对于这些声明,最好是在类扩展中进行。

所以要回答你的问题:

  • 这是额外的@界面…如果我有一个单独的.h文件需要?

不,这不是必需的,但是是一个最佳实践。

  • 为什么这不会出现在iOS 5项目之前?

即使这是一个常用的做法,也不包括在模板中。

  • 我可以使用这个,而不是有一个单独的.h文件?

不。类扩展名不能代替.h文件,你必须声明你的类的“public”接口。

  • 今后的最佳做法是什么?

您应该在类扩展中放入所有不需要在.m文件之外可见的声明。

实现文件中的接口部分允许您声明variables,属性和私有方法,这意味着它们不会被其他类看到。

不,这不是必需的。 但是我尽可能地使用它,只公开那些其他类需要看到的东西。