在 Apple 提供的SimpleStocks示例代码中,dataSource 定义如下:
property (nonatomic, weak) IBOutlet id <APLSimpleStockViewDataSource> dataSource;
然后按如下方式进行各种使用(只有2个示例,但代码中还有更多示例)
NSInteger dataCount = [self.dataSource graphViewDailyTradeInfoCount:self];
NSArray *sortedMonths = [self.dataSource graphViewSortedMonths:self];
我理解 graphViewDailyTradeInfoCount 的作用,以及 graphViewSortedMonths。我会理解的:(NSInteger dataCount = [APLStockViewController graphViewDailyTradeInfoCount:self];
试过了,我想我知道为什么那行不通)
这是问题所在:我阅读第一行代码的方式是,正在向 dataSource 发送消息 graphViewDailyTradeInfoCount (它返回一些数值,指定发生了多少事务)。如果我们假设 25 个事务,本质上是 [dataSource 25];现在我的想法令人难以置信,因为我强烈期望在某个地方,会有代码告诉 dataSource 如何处理它正在发送的 25。但是没有!!!
然后令人难以置信的增加了一个数量级:dataSource 已经发送了 25,它现在返回并将其放入 dataCount。它怎么知道这样做,我也找不到任何代码。
现在,让我发痒,在第二行代码中,dataSource 知道接受(然后返回)一个 NSArray。
在我越来越少见的理智时刻,在我看来,dataSource 除了“通过”它得到的东西之外真的没有做任何事情。电脑不能变魔术,感觉像是一个功能,但它在哪里记录?
谢谢!