2011-01-05 60 views
0

我正在为杂志查看器设计一个API接口。像iGizmo(iPad版)。显示杂志的视图与TableView非常相似。正如人们可以将文章视为章节和页面一样考虑为单元格。UITableViewDataSource的设计原理

因此,我想公开DataSource &代表与UITableView相同的方式。然而,我不完全确定为什么苹果设计TableView委托/数据源,它总是提供TableView作为每个方法的参数。

我试图合理化它,我没有找到这样的api设计的任何好借口。 我在考虑在我的API中忽略tableView/magazineView参数。

您是否看到这样的API设计背后有什么好的理由?

写下如下的方法会不会更容易,更清晰?

– cellForRowAtIndexPath: 
– numberOfSections 
– numberOfRowsInSection: 
– sectionIndexTitles 
– sectionForSectionIndexTitle:atIndex: 
– titleForHeaderInSection: 
– titleForFooterInSection: 

回答

2

有趣的问题。虽然这是一种猜测,但我怀疑它在那里,所以单个数据源类可以作为具有不同要求的多个表视图的代表。 (例如:它可以检查提供的tableView并作出相应的响应。)

因此,如果您从未预料到此要求,则很可能会忽略方法签名中的等效参数。

然后,如果您可能想要访问“调用”magazineView,那么您可以将参数保留在那里 - 这并不像传递指针是资源效率低得令人难以置信。

+1

没错,数据源可能会将内容提供给许多视图,而委托人可能是许多视图的代表。此外,在某些情况下,代理或数据源可能需要检查调用它的视图以确定如何响应。 – Jonah 2011-01-05 18:36:17

+0

@Jonah,@middaparka,我同意,但是您是否曾经实现过一种数据源,即一个实例服务多个桌面视图?为什么不创建相同数据源类的两个实例?这样的API设计似乎忽略了objc是面向对象语言的事实。 – 2011-01-06 01:36:39

+0

我将编写一个数据源来提供某个模型的特定视图,当然可以重用该数据源实例来支持多个视图,例如以不同的方向显示不同的表视图,但我同意数据源通常不需要考虑请求数据的对象。另一方面,我的代表会一直检查其调用者的身份,例如,我可能会使用一个类作为其集体代表来管理NSURLConnections的集合。 – Jonah 2011-01-06 02:13:49