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

Tor*_*ups 47 objective-c ios

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

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
@synthesize ...
Run Code Online (Sandbox Code Playgroud)
  • 如果我有一个单独的.h文件,这是额外的@interface ...吗?
  • 为什么这不会出现在iOS 5之前的项目中?
  • 我可以使用它而不是单独的.h文件吗?
  • 这个最佳实践是什么?

sch*_*sch 79

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

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

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

那么回答你的问题:

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

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

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

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

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

不可以.类扩展不会替换.h您必须声明类的"公共" 接口的文件.

  • 这个最佳实践是什么?

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


Jay*_*sky 11

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

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

  • 私有的意思是编译器没有看到类外的变量,属性和方法,但是因为我们使用的是Objective-C方法并不是真的私有,因为任何人都可以调用任何东西...... (2认同)