正確使用Core Data多執行緒的3種方式

2022-03-29 21:02:48 字數 1070 閱讀 3348

在#pragma conference 2015會議上,marcus zarra,撰寫過關於core data和core animation的書,敘述了三種在多執行緒環境下使用core data的方法並且設法解決在2023年應如何使用core data的問題。實際上,zarras說道,當用乙個擁有十一年歷史的技術比如core data工作時,你所面臨的問題之一是有大量的資訊是可用的,不過查明哪乙份資訊依舊精確以及哪乙份不精確並不是一件簡單的事。

最初的方法

最初的方法是在ios 6推出之前唯一可用的方法。這個方法現在依然可以使用,儘管zarra建議除了在某些極端情況以外不要使用它。它基於四個主要的原則:

這個設計有一些不足之處,比如需要寫很多公式化的**,執行緒規則不明確會導致不定時發生崩潰以及意外執行緒阻塞。隨著推出了ios 8,這些問題改善了一些。並且多虧了乙個debug flag除錯標誌,yosemite才能在它違反core data併發模型的時候讓應用程式崩潰。

艱難的方法

zarras稱之為艱難的方法的是乙個依賴於用於多程序訪問sqlite的方法。這就意味著我們可以擁有多個psc,讓每個moc都可以擁有自己的psc。這會對擺脫任何鎖定問題起到很好的作用並且啟用幾乎所有非同步訪問——除非你沒有寫相同的表以及同時把兩個psc排成一行。

即使有了這個設計,只用乙個moc來把資料反饋到ui是可取的。這個方法會讓用psc來同步資料變得艱難,因為它們不知道對方的任何情況。此外,執行緒和可維護性也會被損害。這個方法有趣的一面在於,這就是icloud如何運作的真實寫照。

最好的方法

這個設計的好處是子moc所有的變化會自動傳送到其主moc上,因此消除了合併的需求。

這個設計的主要缺陷是它速度緩慢,儘管只是慢了百分之幾,zarra說道。它有乙個很棘手的問題就是如果進行太多的非同步操作,有可能會在ui上起連鎖反應,因為其相關的moc會受到序列的多重變化,這可能與另乙個並不相干。

這個設計乙個很重要的細節就是最好不要重複使用很便宜就能創造的子moc。另一方面,能用很久的子moc應該與主moc手動保持同步,因為變化僅僅是從子moc到主moc而反之則不行。

檢視英文原文:three ways to get core data multithreading right

Coredata中的多執行緒

疑問 1 coredata是什麼?結構 2 如果在簡單的demo中,我們可以在主線程中使用coredata。但是如果在真正的大專案中,這樣可行麼?3 假設都在主線程,那麼我們的專案中有很多模組也要進行存放。那麼我們的 該如何組織,使全部模組用乙個資料庫多張表?還是乙個模組乙個資料庫?4 如何在多執行...

CoreData簡單使用

使用coredata的新建步驟 1 新建工程,選擇好coredata 2 配置coredata裡面的字段,進行關聯 然後一直往下,最後會生成2對類,現在直接看 吧!首先是插入資料的 在此插入兩條資料 userinfo user user.userid 1 user.userguid dsadsada...

多執行緒核心3 執行緒的正確停止方式

threadone.isinterrupted thread 0執行緒被請求中斷,返回true threadone.interrupted 與thread.interrupted 由於interrupted 方法為靜態方法,呼叫它的物件為rightwayinterrupted類,因為main執行緒未...