2011-01-05 45 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