为什么没有指定协议方法时没有警告?

时间:2011-03-22 22:40:25

标签: warnings protocols xcode4

我正在使用Xcode 4,定义了一个简单的类接口,并将NSTableViewDelegate和NSTableViewDataSource协议添加到接口定义中。即,    @interface foo:NSObject< NSTableViewDelegate,NSTableViewDataSource>

在我的构建设置中,我已确认启用了“不完整的Objective-C Protocols”选项警告(对于Debug / Any Architecture等),我应该获得NSTableViewDataSource所需的非可选方法的编译时警告协议。但是,我没有得到任何警告,但在运行时我在日志中看到了未定义方法的消息。

任何人都知道为什么?

1 个答案:

答案 0 :(得分:3)

如果你看一下Apple的NSTableView.h,你会看到这个:

@protocol NSTableViewDataSource <NSObject>
@optional

/* Required Methods
*/
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)ta    bleColumn row:(NSInteger)row;
...

因此评论和文档声称这些方法是必需的,但代码说它们不是。编译器最终完全忽略了所有注释和文档。 ;)因此,您没有收到编译器警告。

我想这是他们打算让这两种方法成为必需(会很有意义),但发现很多自己的代码依赖于它仍然是一种非正式的协议。因此,我认为他们决定不再需要它们,而不是改变所有遗留代码的头痛。我希望狮子会改变这一点。