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

时间:2012-03-17 15:08:22

标签: objective-c ios

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

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
@synthesize ...
  • 如果我有一个单独的.h文件,这是额外的@interface吗?
  • 为什么这不会出现在iOS 5之前的项目中?
  • 我可以使用它而不是单独的.h文件吗?
  • 今后最佳做法是什么?

2 个答案:

答案 0 :(得分:79)

那是class extension。您可以使用它来声明您不希望出现在.h文件中的声明。

许多开发人员使用过这种方法,甚至在此之前,他们在.m文件中手动添加了扩展程序。所以我猜Apple在模板中包含了这个,因为它被广泛使用并被认为是一种很好的做法。

实际上,.h文件只应用于制作将从其他文件中使用的声明。您可能必须声明一些仅在.m文件中使用的属性,方法或常量。对于那些声明,最好在类扩展中创建它们。

所以回答你的问题:

  
      
  • 如果我有一个单独的.h文件,这是额外的@interface吗?
  •   

不,这不是必需的,但是最佳做法。

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

即使这是一种常用的做法,它也没有包含在模板中。

  
      
  • 我可以使用它而不是单独的.h文件吗?
  •   

没有。类扩展不会替换您必须声明类的“public”接口的.h文件。

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

您应该在类扩展中添加所有不需要在.m文件之外显示的声明。

答案 1 :(得分:11)

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

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