В коде SimpleStocks выборки, представленной Apple, Datasource определяется следующим образом:SimpleStocks (Apple пример кода)
property (nonatomic, weak) IBOutlet id <APLSimpleStockViewDataSource> dataSource;
, а затем использовали по-разному следующим образом (только 2 примера, но есть больше в код)
NSInteger dataCount = [self.dataSource graphViewDailyTradeInfoCount:self];
NSArray *sortedMonths = [self.dataSource graphViewSortedMonths:self];
Я понимаю, что делает graphViewDailyTradeInfoCount, а также graphViewSortedMonths.I поняли бы: NSInteger dataCount = [APLStockViewController graphViewDailyTradeInfoCount:self];
(Пробовал, и я думаю, я знаю, почему это не может работать)
Вот так: Как я прочитал первую строку кода, dataSource отправляется сообщение graphViewDailyTradeInfoCount (которое возвращает некоторое числовое значение, определяющее, сколько транзакций произошло). Если мы предположим 25 транзакций, в основном [dataSource 25]; И теперь мой разум ошеломляет, потому что я сильно ожидаю, что где-то будет код, рассказывающий dataSource, что делать с отправленным 25. Но нет!
Тогда ошеломляющее усилие увеличивается на порядок: dataSource отправил 25, он теперь возвращает это и помещает его в dataCount. Как это известно, для этого нет кода, который я могу найти для этого.
И теперь, щекочу меня баллистическим, во второй строке кода dataSource знает, чтобы принять (а затем вернуть) NSArray.
В мои более редкие разумные моменты мне кажется, что dataSource действительно не делает ничего, кроме «прохода», которое ему передается. Компьютеры не могут делать магии, это похоже на функцию, но где она задокументирована?
Спасибо!
Спасибо, но я на самом деле не делаю этого: 'NSInteger dataCount = [[self dataSource] graphViewDailyTradeInfoCount: self];' и не так: сначала получает указатель на объект dataSource, используя (неявный) getter (с фрагментом '[self dataSource]', второй, отправив этому объекту сообщение graphViewDailyTradeInfoCount: (с параметром self), который, третий, заставляет объект возвращаться (NSInteger), который хранится в dataCount? Но как объект dataSource знает, как вернуть этот NSInteger (и позже NSArray), если у него нет каких-либо методов? Извините за будучи настолько тупым. –
(Спасибо Джошу Касуэлю за то, что он указал на эквивалент синтаксиса, отличного от точки. Aaron Hillegass 'Obj-C BNR Guide предлагает избегать точечной нотации). –