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