2014-03-13 51 views

回答

1

我的簡短答案如下。

輕量級遷移發生在SQLite級別並自動處理(您需要在創建存儲時設置正確的選項參數)。沒有對象加載到內存中,並且內存要求很低。一般來說,這種遷移類型非常快。

相反,重遷移比第一個更難。執行它意味着將每個實體加載到內存中,將它從舊存儲轉換爲新存儲,最後將其寫回到磁盤。通常它是在後臺執行的,因爲它可能需要時間,所以應該警告用戶正在進行某種類型的處理。這需要開發人員進行更多的工作,因爲他需要向Core Data說明如何遷移。

說了這麼多,Apple documentation是你的朋友。例如,關於第一類遷移的說:

輕量級遷移過程中 應用開發的早期階段時尤其方便,你可能會經常改變你的管理對象 模型,但你不希望有保持再生測試 數據。您可以遷移現有數據,而不必爲用於創建需要遷移的商店的每個模型版本創建映射模型的定製 。

此外,你可以找到其他參考googling一littel位。

編輯1

來概括。自定義更復雜。 作爲開發人員,您有責任指定核心數據如何遷移。所以,你需要手動完成。速度很慢,通常需要很多時間才能瞭解正在發生的事情。相反,光線自動且快速。您只需設置選項,核心數據就會照顧您。另見Marcus Zarra評論。特別是,

此外,應避免在iOS上的所有案件 它不是最初設計到iOS設備上運行,並導致更多的問題 比它的價值重遷移。如果您不能使用輕量級遷移 (這是最好的選擇),那麼執行導出/導入要比執行重量級移植要好得多 。

+1

此外,您應該避免在iOS上的所有情況下進行大量遷移,因爲它最初不是設計用於在iOS設備上運行,並導致出現更多問題。如果您不能使用輕量級遷移(這是最佳選擇),那麼執行導出/導入遠比進行重量級遷移要好。 –

+0

@ MarcusS.Zarra完全同意你的看法。自定義遷移可能非常難以實現。它需要時間和對核心數據的瞭解。我沒有多少人能夠使用它,除了你,obviuosly;) –

+0

而我不使用它:) –