Почему некоторым объявлениям методов в протоколе UITableViewDataSource предшествует табличное представление: tableView: (UITableView *)? - PullRequest
1 голос
/ 04 февраля 2010

Постановка вопроса может быть запутанной. Я понимаю, почему для такого метода, как cellForRowAtIndexPath, полезно получить указатель на соответствующий UITableView.

То, что я не понимаю, является более объективным: С-я: я хотел бы назвать это особый способ объявления методов?

Например, если объект (например, UITableView), имеющий некоторый внутренний протокол (например, UITableViewDataSource), будет отправлять сообщения разработчикам, используя специальный способ ссылки на себя.

т.е. Вместо передачи ссылки на себя в качестве обычного аргумента сообщения Objective C, UITableView использует этот специальный синтаксис?

1 Ответ

4 голосов
/ 04 февраля 2010

Редактировать

В комментариях к этому ответу довольно долгая дискуссия, которая уточнила исходный вопрос.Я опубликую основные моменты здесь, чтобы помочь другим, у кого могут быть похожие вопросы.

Это сводилось к путанице между двумя методами,

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Первый метод - это метод экземпляраUITableView, который возвращает UITableViewCell для заданного пути индекса.Этот метод вызывается для объекта табличного представления.

Второй метод представляет собой метод источника данных, объявленный в протоколе UITableViewDataSource, который запрашивает UITableViewCell для данного пути индекса.

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

Надеюсь, это поможет.


Большинство протоколов делегатов / источников данных в Cocoa / Cocoa Touch следуют этому шаблону.Это способ сказать что-то вроде «это табличное представление хочет эти данные».

Рассмотрим что-то вроде объекта текстового поля.У вас может быть интерфейс со многими объектами текстового поля, которые все сообщают одному и тому же делегату, чтобы определить их поведение для определенных действий.Передавая делегату в качестве аргумента в методе, делегат знает, какое текстовое поле вызывает метод.

Я не уверен, что полностью понимаю, о чем вы спрашиваете, но именно так объектысообщить своим делегатам / источникам данных, какой именно объект отправляет метод.В случае UITableView это менее очевидно, потому что часто в контроллере табличного представления есть только одно табличное представление, но приведенный мною пример текстового поля должен обрисовать этот факт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...