Почему я не получаю предупреждения, если не указаны методы протокола? - PullRequest
0 голосов
/ 23 марта 2011

Я использую Xcode 4, у меня определен простой интерфейс класса, и я добавил протоколы NSTableViewDelegate и NSTableViewDataSource в определение интерфейса. то есть, @interface foo: NSObject

В моих настройках сборки я подтвердил, что включено предупреждение «Incomplete Objective-C Protocols» (для отладки / любой архитектуры и т. Д.), И я должен получить предупреждение во время компиляции для не необязательных методов, необходимых для NSTableViewDataSource протокол. Однако я не получаю никаких предупреждений, а затем во время выполнения вижу в журнале сообщение о том, что методы не определены.

Кто-нибудь знает почему?

1 Ответ

3 голосов
/ 17 апреля 2011

Если вы посмотрите на Apple NSTableView.h, вы увидите следующее:

@protocol NSTableViewDataSource <NSObject>
@optional

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

Таким образом, комментарий и документация утверждают, что методы необходимы, но код говорит, что это не так. Компилятор в конечном итоге полностью игнорирует все комментарии и документацию. ;) Следовательно, вы не получаете предупреждение компилятора.

Полагаю, они собирались сделать эти два метода необходимыми (имело бы большой смысл), но обнаружили, что многие из их собственного кода все еще полагаются на то, что он является неформальным протоколом. Поэтому вместо головной боли, связанной с изменением всего унаследованного кода, я полагаю, что они решили пока не делать их обязательными. Я ожидаю, что это изменится во Льве.

...