2013-06-26 85 views
3

我認爲我的iPhone應用程序出現了一些性能問題。加載,保存和重新加載數據的最佳方式

我喜歡向您展示如何從互聯網加載數據,將它們存儲在電話上並重新加載它們以在表格視圖上打印出來。 我在應用程序上有幾個模塊,所以我希望它是好的,如果我解釋我用來做的一般方式,也許你們中的一個人有了一個想法。

數據量約爲250個數據集,包含10-20個數據字段(整數/文本)。

步驟1:由URL請求獲得一個JSON數據串

我將一個URL請求與一些限制值(例如city_id和LAST_UPDATE_TIME)開始一個的MySQL數據庫的請求限制結果。

第2步:將JSON對象保存到iPhone上的SQLite3數據庫。

我會這樣做,因爲我喜歡在離線模式下使用數據。 這部分應該是重量級的一部分,因爲它佔總時間的3/4。 我運行了這些對象,並檢查是否之前保存過這個對象。 (這裏我使用import_id來標識MySQL數據庫對象) 如果我確實找到了它,我會更新這個數據集,否則我會插入它。

步驟3:從SQLite的重新加載數據,放入一個NSMutableArray

此Array將由TableView中使用。

注意:數據將在主線程中加載。其他線程將用於延遲加載一些拇指或顯示一個旋轉輪。

程序中是否存在大錯誤?我應該在另一個線程中加載數據,但是此時應該在視圖中顯示什麼內容?

什麼是最好的方法?

+0

你的想法看起來不錯;不過,我會在後臺加載和填充數據庫,並可能向用戶顯示一個活動指示器。 – Jeremy

+0

基本上沒問題,儘管弄明白如何使用一個「懶惰」的數組方案可能是明智的,該方案僅在被引用時才從數據庫加載單個元素(有點類似於TableViews管理行)。有幾種方法可以解決這個問題。 (請注意,在啓動過程中加載整個陣列會產生「糟糕的用戶體驗」,並可能導致應用程序被迫中止。) –

+0

@Jeremy我實現了一個「Spinning Wheel」來顯示用戶,數據將被加載 –

回答

2
  • 嵌入一個JSON文件到您的應用程序包,涉及到當前數據從你的json解析。這將用於第一次脫機使用只是爲了這種情況,
  • 更新你的json文件,只要設備在線,但只有當你的解析版本與你有不同時更新。
  • 隨時隨地使用該json文件您的設備脫機
  • 由於您的包中的json文件將始終是最新版本,因此請將您的表數據加載出來。

希望這些會幫助你。

+0

我想我會在實際項目中使用這種方式。謝謝! (其他想法我會記住未來的項目,感謝所有其他人!) –

4

這裏有一些想法:

  1. 使用AFNetworking,使生活更方便自己。它使異步和簡單的Web服務獲得JSON返回。
  2. 而不是直接使用SQLite使用Core Data。使用它比任何其他應用程序中的任何實際持久性都容易得多。
  3. 而不是以這種方式手動執行,將結果輸入到Core Data中(請參閱步驟2),可以使用NSFetchedResultsController直接從Core Data加載表視圖。這需要照顧很多東西的你,如應對變化,高效的內存管理,處理變化的數據等
+0

感謝這個不錯的想法,我想我會在未來的項目中使用它們,但是現在我希望我能夠解決這個問題,而不用像SQLite或Core Data這樣基本的東西改變。 AFNetworking看起來不錯,但Step1(加載JSON數據)不需要太多時間。我想我已經把加載和保存數據的完整過程(步驟1 + 2)放到了後臺進程中。我希望這可以解決性能問題。 –