2012-12-23 187 views
0

,我的應用程序會詢問用戶一堆數字,通過核心數據存儲它們,然後我的應用程序負責向用戶顯示所有這些數字的平均值。iOS:在覈心數據中使用GCD和核心數據

所以我想我應該做的是,用戶輸入一個新號碼後,我可以啓動一個新的線程,在一個NSFetchDescription實例取到的所有對象,並把它在我的NSManagedObjectContext,做適當的計算,然後更新主線程上的UI。

我知道核心數據中的併發規則是每個NSManagedObjectContext實例的一個線程,所以我想知道的是,你是否認爲我剛剛描述的沒有我的應用程序爆炸5個月後?我只是不認爲有必要實例化一個新的上下文只是爲了做一些可怕的計算...

+0

我喜歡核心數據,但如果你所保存的只是「一堆數字」,這可能是一個錯誤的工具......尤其是如果你沒有對它們做任何事情,除了取所有(和存儲)。 –

回答

0

根據你所描述的,爲什麼不只是存儲數字,因爲它們被輸入到CoreData模型和也變成了NSMutableArray?看起來好像您正在存儲這些內容以供將來檢索,以防有人需要查看(也可能修改)以前的計算。在這種情況下,在輸入當前一組數字後,不需要執行提取操作。只需使用可變數組並用當前計算的所有數字填充它。當輸入一個數字時,將它保存到模型和數組中。當用戶準備好查看平均值時,對已填充數組中的數字進行數學運算。如果用戶想要修改以前的計算,請將這些數字檢索到一個數組中,並從那裏開始工作。

底線是,你不應該需要使用多個線程和合並Context s,除非你是從一個大型數據集(如電話簿的初始播種等)填充模型。修改Context並在該上下文中調用保存對於您所描述的如此小的更改而言是非常快速的事情。

0

我想說你可能想要做一些測試,特別是關於數據集的大小。如果它非常小,sqlite調用非常快,所以你可能會在主隊列中進行操作。但是,如果需要一段時間,那麼將它從主線脫離是明智的。

蘋果在2011年引入了父母和孩子託管的對象上下文的概念,以便更容易地在不同線程上使用MO上下文。您可能想查看Core Data上的WWDC視頻。

你可以使用NSExpression獲取真正的高性能函數,如最小值,最大值,平均值等,這裏是一個很好的鏈接。有對SO

http://useyourloaf.com/blog/2012/01/19/core-data-queries-using-expressions.html

運氣好例子!