Why is there @interface above @implementation?
我想知道为什么会有两个
1 2 3 4 5 | #import <UIKit/UIKit.h> @interface TestTableViewController : UITableViewController @end |
和(自动生成的)
1 2 3 4 5 6 7 8 9 10 11 | #import"TestTableViewController.h" @interface TestTableViewController () @end @implementation TestTableViewController ... methods delegated from UITable delegates @end |
所以我的问题是,
提前谢谢
第二个
1 | @interface MyClass () |
这一个非常重要,因为您可以使用它向类中添加额外的实例变量。
第二个类别称为"类别",由一对非空括号表示,括号内包含类别的名称,如下所示:
1 | @interface MyClass (CategoryName) |
它还用于扩展类。不能使用类别将实例变量添加到类中,但是同一类可以有多个类别,这就是为什么它主要用于扩展没有源代码的系统/框架类的原因——因此,在这个意义上,类别与类扩展完全相反。
第二个"接口"定义了"testtableviewcontroller"类的扩展名,只有导入h文件的人才能看到它。这是在目标C中创建私有方法的事实方法。
普通类别界面如下:
1 2 3 | @interface TestTableViewController (Your_Category_Name) - (void)doSomething; @end |
以及相应的实施:
1 2 3 4 5 | @implementation TestTableViewController (Your_Category_Name) -(void)doSomething { // Does something... } @end |
在您的示例中,没有指定类别名称,因此它只扩展类,您可以在普通实现中实现该方法。
通常,这种技术用于"隐藏"方法。它们没有在头文件中声明,如果只导入.h文件,则不可见。
在这里,您可以声明只想在类中使用的私有方法和属性,但不能公开给其他类。