2013-12-12 28 views
0

Xcode中:5.0.2 iOS的:的7.0.xiOS 7 - UITableViewController大數據源 - 策略建議?

我有一個是有條件所示的二次視圖當在我的應用程序在用戶登錄。此次要視圖顯示用戶必須選擇其中一個作爲其已驗證會話生命週期的「默認」值的項目列表。大多數我的用戶只會看到這種次要視圖。

項目列表以Web服務的JSON形式返回,可以從1項到1000項。如果返回,則次視圖將不會顯示。

該json將被再次構造兩個元素,每個項目,iditemName。我估計在最壞的情況下會有幾百kb的下載 - 而且它只有一次下載。也許一個可搜索的API而不是數據轉儲會是更好的做法?

一旦結果返回,它們將被處理成兩個NSArray。一個NSArrayNSDictionary爲我檢索一次idNSArrayNSString包含itemName - 用於填充UITableView並執行關鍵字搜索;

For retrieving ID reference: 
[ { id: 0, itemName: "one" }, { id: 1 itemName: "two" } ] 

For populating the UITableView data source 
[ "one", "two" ] 

現在我需要這個數據在我的UITableView。由於這是一次性操作(稍後可以改變,但用戶通常不會定期更改),因此我計劃將整個陣列添加到UITableView中。

通常情況下,您應該將什麼最大大小放入表視圖?這會導致我一些嚴重的記憶問題嗎?將如何對100的搜索時的關鍵詞檢索公平 - 1000

我也期待也許在更新UI遵循這一非常緊密的聯繫人應用程序(UILocalizedIndexedCollation?),這樣再次將對此產生影響。

感謝,

回答

0

擁有JSON,相應的基金會表示將消耗大約 RAM的5倍以字節爲單位的長度。例如,如果您的JSON是300千字節(UTF-8),那麼NSJSONSerialization將創建一個可能消耗1.5 MB RAM的基礎層次結構。

這個數量很適合RAM。

當且僅當你不想堅持 JSON表示或相應的模型,並且不希望利用核心數據因爲其他原因(如編輯,撤消,回退等),我會使用核心數據強烈地反對:因爲在最糟糕的情況下您的數據仍然「很小」,因此在假設它可以保證您的記憶的情況下不需要利用核心數據。

核心數據也不便宜,記憶明智。在你的情況下,使用核心數據實際上會導致你的應用程序消耗更多 RAM,因爲SQLite的緩衝區和緩存,核心數據緩衝區和緩存以及內部結構。在實踐中,如果您的場景中有1000個對象,則Core Data/SQLite方法將消耗約4 Mbyte。這比您的JSON表示大約多3倍。另一方面,當你的元素數量增加很多,並且還有內存壓力時,Core Data可能不會消耗更多的RAM。

+0

謝謝你,這是一個有趣的觀點。數據將不會持久,因爲用戶只能從1000中選擇一個項目作爲默認值進行保存 - 一旦選擇該行,我將把該單個項目存儲在磁盤上,這將是唯一的持久性。我覺得也許這實際上是更高效和更簡單的實施。作爲一個方面說明,我剛剛跑完了一個完整的演示文件,並使用當前最多800個項目的85kb –

+0

我再次用json文件中的3000多個元素進行測試,並且工作時沒有輕微的呃逆。完美,謝謝你的建議。 –

0

我也會向您強烈推薦CoreData方法與UIFetchedResultController。這是針對您的問題制定的解決方案。當您從網絡上下載數據時,FetchedResultController將顯示空白表格視圖,當下載完成或「足夠」時,您可能會顯示數據而不會阻止用戶界面。更重要的是,如果你想一次顯示一個龐大的數據庫,當用戶向下滾動時,控制器會「自行」獲取更多的數據。

當然UILocalizedIndexedCollation也支持在這裏。

+0

感謝您在這裏的答案。由於我只使用過這個數據集,是否值得使用CoreData進行存儲?當用戶如果想要改變他們的產品,那麼很可能需要重新下載,因爲他們會尋找一個以前不存在的產品。 我將此視爲您看到的「一次性」數據集,並且希望確保其高效的長期和短期 - 並避免執行任何複雜的操作,例如重新同步CoreData等以執行此類最低限度使用的任務。 –

+0

你必須將它存儲在任何地方。 CoreData是最好的地方,因爲使用'NSPredicate'你可以改變和加載任何你想要的。在這裏你沒有更多的選擇(純sqlite文件也可以)。重新同步操作由'UIManagedDocument'處理:) – Kuba

+0

我還是iOS開發的新手,但NSPredicate類看起來非常適合我的需求。時間谷歌的一些教程如何設置這.. ..!如果你知道任何好的學習資源,請讓我知道。非常感謝您的幫助! –