IOS面試題(TableView) ----- 數(shù)據(jù)源同步

問題: 請說一下tableview的數(shù)據(jù)源同步問題, 都有哪些解決方法

或者問: 多線程對tableview同一共享數(shù)據(jù)源操作 都有哪些解決方法

我們看下一個例子, 方便理解理解這個問題

例子

針對tableview, 要同步進(jìn)行操作, 數(shù)據(jù)變更怎么處理 ?

下面方法我都拿這個場景舉例:

tableview 初始數(shù)據(jù)為[A, B, C], 主線程做個刪除操作, 刪除B。子線程做個請求加載, 加載[D, E, F]。最終目的以返回 [A, C, D, E, F] 刷新UI

方法一: 并發(fā)訪問
方法一例子
  • 子線程拷貝一份數(shù)據(jù)1:[A, B, C], 進(jìn)行數(shù)據(jù)請求
  • 主線程刪除B, 變?yōu)?[A, C] 刷新UI, 此時子線程還在數(shù)據(jù)請求, 暫未返回應(yīng)答
  • 子線程數(shù)據(jù)請求完成, 變成數(shù)據(jù)3 [A, B, C, D, E, F], 返回
  • 以數(shù)據(jù)3 [A, B, C, D, E, F] 刷新UI

很明顯是錯誤的

稍微改動一下

并發(fā)訪問解決方法

在刪除操作之后, 我們做一個記錄操作, 而在子線程數(shù)據(jù)返回之后, 我們同步操作, 已達(dá)到數(shù)據(jù)正常返回的目的

缺點(diǎn): 記錄操作會做額外的開銷

方法二: 串行訪問

串行訪問是大家寫業(yè)務(wù)最常用的方法

串行訪問解決方法

由于是串行訪問, 那么肯定有一串行隊(duì)列

  • 子線程中進(jìn)行網(wǎng)絡(luò)請求/數(shù)據(jù)解析結(jié)果方法串行隊(duì)列, 進(jìn)行新增數(shù)據(jù)預(yù)排版等操作, 此時主線程刪除操作等待
  • 串行隊(duì)列處理完子線程數(shù)據(jù)之后, 同步主線程刪除操作
  • 刷新UI

缺點(diǎn): 如果子線程操作耗時情況下, 主線程的操作要一直延時等待

總結(jié):

2種方法實(shí)際都各有利弊, 針對于不同場景使用不同方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問題多線程下,修改tableview的數(shù)據(jù)源,數(shù)據(jù)同步問題的解決方案? 應(yīng)用場景:在某些新聞類app中,當(dāng)有用戶做...
    時米高的人生筆記閱讀 1,143評論 0 0
  • 當(dāng)我們開啟子線程處理數(shù)據(jù)源的時候,主線程的操作并沒有記錄在子線程中。這樣就會導(dǎo)致子線程處理完數(shù)據(jù)返回主線程刷新UI...
    iOS三年閱讀 920評論 1 7
  • 數(shù)據(jù)源同步 數(shù)據(jù)源同步問題:刪除一條數(shù)據(jù)(主線程)-->數(shù)據(jù)源 < -- LoadMore (子線程) (涉及到...
    睡懶覺的卡比獸閱讀 7,063評論 0 0
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,607評論 30 472
  • 序言 目前形勢,參加到iOS隊(duì)伍的人是越來越多,甚至已經(jīng)到供過于求了。今年,找過工作人可能會更深刻地體會到今年的就...
    SunnyLeong閱讀 698評論 1 11

友情鏈接更多精彩內(nèi)容