Если вы посмотрите на Apple NSTableView.h, вы увидите следующее:
@protocol NSTableViewDataSource <NSObject>
@optional
/* Required Methods
*/
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)ta bleColumn row:(NSInteger)row;
...
Таким образом, комментарий и документация утверждают, что методы необходимы, но код говорит, что это не так. Компилятор в конечном итоге полностью игнорирует все комментарии и документацию. ;) Следовательно, вы не получаете предупреждение компилятора.
Полагаю, они собирались сделать эти два метода необходимыми (имело бы большой смысл), но обнаружили, что многие из их собственного кода все еще полагаются на то, что он является неформальным протоколом. Поэтому вместо головной боли, связанной с изменением всего унаследованного кода, я полагаю, что они решили пока не делать их обязательными. Я ожидаю, что это изменится во Льве.