关于objective c:用于.m文件的空@interface声明是什么?

What is the empty @interface declaration in .m files used for?

我开始了一个新的iOS 5项目,在每个.m文件的顶部发现了一些新的东西。

1
2
3
4
5
6
7
8
#import"HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
@synthesize ...
  • 这是额外的@接口吗…如果我有单独的.h文件,需要吗?
  • 为什么在iOS 5之前的项目中没有出现这种情况?
  • 我可以用这个代替单独的.h文件吗?
  • 今后的最佳实践是什么?


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

甚至在以前,许多开发人员都使用这个方法,他们在.m文件中手动添加了扩展名。所以我想苹果在模板中包含了这个,因为它被广泛使用,并且被认为是一个好的实践。

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

所以要回答你的问题:

  • Is this extra @interface ... required if I have a separate .h file?

不需要,但这是一种最佳实践。

  • Why did this not show up in pre iOS 5 projects?

即使这是一个常用的实践,它也不包括在模板中。

  • Can I use this instead of having a separate .h file?

不。类扩展名不会替换.h文件,您必须在该文件中声明类的"public"接口。

  • What is the best practice for this going forward?

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


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

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