NSTableView可用于osx 10.0,但NsTableViewDataSource仅适用于10.6?

时间:2010-01-27 19:03:22

标签: cocoa macos nstableview

我正在查看NSTableViewDataSource的文档,他们说这个协议仅适用于osx 10.6。怎么会这样? NSTableViewDataSource不是包含NsTableView所有数据的对象吗?

3 个答案:

答案 0 :(得分:4)

要添加@Zydeco所写的内容,Objective-C中的@protocol在10.5之前没有@optional个属性。因此,Apple无法使用@protocol来定义委托方法的内容,因为委托对象选择仅实现委托方法的一部分。 Apple在过去的日子里使用了一种称为非正式协议的东西,它们只是NSObject类。

现在他们介绍了在@optional中将某些方法标记为@protocol的方法,他们决定在10.6中使每个代表成为正式协议。这样可以进行更多的编译时检查。但功能并没有改变。

有关详细信息,请参阅协议上的official documentation

答案 1 :(得分:3)

NSTableViewDataSource作为正式协议存在于10.6中,在旧版本中,NSTableViewDataSource中的方法只是委托方法,但它的工作方式相同:在数据源对象中实现方法。

答案 2 :(得分:1)

在10.6中,Apple正式确定了许多代表和数据源非正式协议。因此,像

这样的非正式协议
@interface NSObject (MyViewDataSource)

// data source methods

@end

成了

@protocol MyViewDataSource
//data source methods
@end

优点是编译器可以进行一些编译时检查,以警告您是否传递了不符合要求的实例(即没有实现NSTableViewDataSource作为数据源,例如{{1}如果在声明类在NSTableView中实现协议后没有实现协议的所有必需方法,则可以发出警告。

10.6之前不存在@interface,因此如果要使用以前版本的SDK进行编译,则必须声明它。您可以这样做并将您的数据源对象(现在实现虚拟协议)作为先前SDK中的数据源传递,因为它必然也符合先前版本中定义的非正式协议。