0

我正在查看其他人编写的一些源代码,这让我很感兴趣看到这一行:

@interface UITableView (MyTableViewGestureDelegate)

现在我以前只看到过这个:

@interface MyTableView : UITableView <MyTableViewGestureDelegate>

所以我很困惑。

关于我在看什么的任何想法?

4

3 回答 3

1

它是类类别声明 - 使用类别,您可以将类实现拆分为多个文件或向现有类添加方法。

于 2012-08-18T09:08:40.820 回答
0

这是一个类别声明。

类别允许您将方法添加到现有类——甚至是您没有源代码的类。类别是一个强大的功能,它允许您扩展现有类的功能而无需子类化。使用类别,您还可以在多个文件中分发您自己的类的实现。类扩展类似,但允许在主类@interface 块内以外的位置为类声明额外的必需 API。

类别接口的声明看起来很像类接口声明——除了类别名称列在类名称后面的括号内,并且没有提及超类。除非其方法不访问该类的任何实例变量,否则该类别必须为其扩展的类导入接口文件:

一般语法:

#import "ClassName.h"

@interface ClassName ( CategoryName )

// method declarations

@end

请注意,类别不能为该类声明额外的实例变量;它只包括方法。但是,类范围内的所有实例变量也在类范围内。这包括类声明的所有实例变量,甚至是声明为@private 的实例变量。

可以添加到类中的类别数量没有限制,但每个类别名称必须不同,并且每个类别都应声明和定义一组不同的方法。

请检查链接示例

于 2012-08-18T09:10:01.567 回答
0

MyTableView : UITableView < MyTableViewGestureDelegate > 说你的类 MyTableView - UITableView 的子类 - 实现了名为的协议MyTableViewGestureDelegate

UITableView (MyTableViewGestureDelegate) 说您正在为名为的类创建一个类别UITableViewMyTableViewGestureDelegate

于 2012-08-18T09:12:39.143 回答