Objective c UITableViewDataSource设计的基本原理

Objective c UITableViewDataSource设计的基本原理,objective-c,cocoa-touch,Objective C,Cocoa Touch,我正在为杂志查看器设计一个API接口。类似于iGizmo(用于iPad)的东西。显示杂志的视图与TableView非常相似。我们可以把文章看作是部分,把页面看作是单元 因此,我希望以与UITableView相同的方式公开DataSource&Delegate。然而,我不完全确定苹果为什么设计TableView委托/数据源,它总是在每个方法中提供TableView作为参数 我试图使它合理化,但我没有找到任何好的理由来进行这样的api设计。 我正在考虑在API中省略tableView/magazin

我正在为杂志查看器设计一个API接口。类似于iGizmo(用于iPad)的东西。显示杂志的视图与TableView非常相似。我们可以把文章看作是部分,把页面看作是单元

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

我试图使它合理化,但我没有找到任何好的理由来进行这样的api设计。 我正在考虑在API中省略
tableView
/
magazineView
参数

您认为这种API设计背后有什么好的理由吗?

编写下面这样的方法不是更容易、更清晰吗?

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

有趣的问题。虽然这是一个猜测,但我怀疑它是存在的,因此单个数据源类可以作为具有不同需求的多个表视图的委托。(即:可以检查提供的tableView并做出相应的响应。)

因此,如果您从未预料到这一需求,那么您很可能会从方法签名中省略等效参数


再次强调,如果您可能希望访问“调用”magazineView,您可以将参数留在其中-这并不是说传递指针是难以置信的资源效率低下。

完全正确,一个数据源可能为多个视图提供内容,而一个委托可能是多个视图的委托。此外,在某些情况下,委托或数据源可能需要检查调用它的视图,以确定如何响应。@Jonah,@middaparka,我同意,但您是否曾经以一个实例为多个表视图提供服务的方式实现过数据源?为什么不创建同一数据源类的两个实例呢。这样的API设计似乎忽略了objc是一种OO语言这一事实。我将编写一个数据源来提供某个模型的特定视图,并且肯定会重用该数据源实例来支持多个视图,例如不同方向的不同表视图,但我同意数据源通常不需要考虑请求数据的对象。另一方面,我的代理会一直检查调用方的身份,例如,我可能会使用一个类作为其集体代理来管理NSURLConnections集合。@Piotr必须同意Jonah的观点,因为这种设置最有可能的用法是对同一数据有两种不同的视图,这是一个相当普遍的现象。