为什么@interface上面有@interface?

cod*_*nja 37 xcode objective-c ios ios5 xcode4.4

我想知道为什么有两次@interface.一个在class.h和另一个class.m.例如:

TestTableViewController.h:

#import <UIKit/UIKit.h>

@interface TestTableViewController : UITableViewController

@end
Run Code Online (Sandbox Code Playgroud)

和(自动生成)class.m我发现:

#import "TestTableViewController.h"

@interface TestTableViewController ()

@end

@implementation TestTableViewController

... methods delegated from UITable delegates

@end
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,什么@interface TestTableViewController ().m的文件是什么.为什么会这样?我需要它吗?

提前致谢

小智 54

第二个@interface指令位于实现文件(.m)中 - 您可以从中推断出它用于声明类的创建者不希望向类的用户公开的内容.这通常意味着私有和/或内部方法和属性.另请注意,执行此操作有两种类型.那个(你在这里看到)被称为"类扩展",它由一对空括号表示:

@interface MyClass ()
Run Code Online (Sandbox Code Playgroud)

这个特别重要,因为您可以使用它来向您的类添加其他实例变量.

第二个称为"类别",由一对非空括号表示,包含类别的名称,如下所示:

@interface MyClass (CategoryName)
Run Code Online (Sandbox Code Playgroud)

它也用于扩展课程.您不能使用类别将实例变量添加到类中,但是您可以为同一个类创建多个类别,这就是为什么它主要用于扩展您没有源代码的系统/框架类的原因 - 所以从这个意义上讲,类别与类扩展完全相反.