2011-12-05 29 views
0

我正在構建一個應用程序,需要從許多http源收集數據。有些時候,這些來源的數量可能會達到700個,總共有35 MB。處理iOS上的核心數據數據庫頻繁更新和請求的最佳做法?

爲了避免每次需要下載數據並避免向用戶收取鉅額費用,我認爲最好將結果存儲到SQLite核心數據數據庫中,第一遍之後,然後根據需要在本地執行請求。

我不是在搜索最佳方式來避免在存儲下載的數據時發生崩潰。我使用具有多達7個http同時請求的操作隊列下載數據,並且我擔心在從2個線程同時訪問相同的管理對象上下文時可能會遇到崩潰,並且由於我們正在討論物理磁盤訪問以存儲在數據庫中,事情可能會變得複雜。

我只想知道一個很好的實踐來存儲這些類型的數據,然後在其中執行快速搜索,而不會讓應用程序由於多線程問題而一直崩潰。

預先感謝您。

回答

1

你不應該有2個線程訪問相同的NSManagedObjectContext。每個線程都應該有自己的NSManagedObjectContext,並且在需要時使用mergeChangesFromContextDidSaveNotification:來合併上下文。多線程和核心數據可能會非常棘手,所以您需要跨越所有的T並將所有的I點都打印出來,但這應該是可能的。 iOS5爲帶有鎖定功能的NSManagedObjectContext帶來了一些更好的多線程支持,但我還不太熟悉它,但是如果您的目標是iOS5,請參閱Managing Concurrency類參考部分,任何iOS5之前的版本擁有多個MOC。

另外,我相信當蜂窩網絡上的iOS同時限制設備最多有2個併發HTTP請求。

+0

謝謝。 2個併發HTTP請求?你有這個鏈接嗎?如果我有一個具有4個最大併發保持操作的操作隊列會發生什麼? – csotiriou

+0

所以我想這實際上是根據這個限制的移動網絡。 「大多數移動網絡(3G)不允許來自給定IP地址的兩個以上併發HTTP連接。也就是說,從您的設備,您無法在3G網絡上打開兩個以上的併發HTTP連接,邊緣甚至更糟。在大多數情況下,不能打開多個連接,傳統家庭寬帶(Wifi)的這一限制相當高(六)。「在這裏找到。 http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/不確定有效性。 –

+0

關於它是否有最多2個,你有4個預定,我會假設(如果網絡庫足夠聰明),它會將這些額外的請求保留在隊列中,直到它們可以被處理。 –