我正在使用Xcode 4,定义了一个简单的类接口,并将NSTableViewDelegate和NSTableViewDataSource协议添加到接口定义中。即, @interface foo:NSObject< NSTableViewDelegate,NSTableViewDataSource>
在我的构建设置中,我已确认启用了“不完整的Objective-C Protocols”选项警告(对于Debug / Any Architecture等),我应该获得NSTableViewDataSource所需的非可选方法的编译时警告协议。但是,我没有得到任何警告,但在运行时我在日志中看到了未定义方法的消息。
任何人都知道为什么?
答案 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;
...
因此评论和文档声称这些方法是必需的,但代码说它们不是。编译器最终完全忽略了所有注释和文档。 ;)因此,您没有收到编译器警告。
我想这是他们打算让这两种方法成为必需(会很有意义),但发现很多自己的代码依赖于它仍然是一种非正式的协议。因此,我认为他们决定不再需要它们,而不是改变所有遗留代码的头痛。我希望狮子会改变这一点。