coreData是iOS開發中資料庫相關的核心架構,但是在多線程處理的情況下有點麻煩。官方有三種方法
1. 每一個thread都有一個NSManageObjectContext
2. 隻有一個NSManageObjectContext,但是由一個線程來合并資料
3. 隻有一個NSManageObjectContext,但得加鎖的方法控制,達到線程同步。
這三種方法都在網方文檔中有介紹。
今天我自己介紹一種方法,并用有demo展示。設計思路是:
專門開啟一個線程,用來處理所有的資料庫操作,有一個緩沖區,用來存放所有資料庫操作的指令(update/insert/delete/retrive),我叫這個線程為資料庫操作線程。 其它線程,如主線程,如果需要retrive資料,就生成相應的資料庫操作指令并存放在資料庫操作線程的緩沖區中。然後資料庫操作線程就讀取緩沖區中的指令執行,并執行主線程傳進來的回調方法。其實這就是生産者消費者模型, 我用NSConditionLock來同步緩沖區, 用block的方式實作回調。
這個設計的好處:
1.隻需要實作回調方法與生成相應的資料庫操作指令,至于如何寫,我的demo裡都有例子。
2.不需要管理多線程操作資料庫帶來的麻煩。
3.簡單易用。
完整demo下載下傳:點選打開連結
代碼沒寫注釋, 不懂的可以問我。