iOS KVO方式監(jiān)聽數(shù)組的變化

iOS默認不支持對數(shù)組的KVO,因為普通方式監(jiān)聽的對象的地址的變化,而數(shù)組地址不變,而是里面的值發(fā)生了改變。

第一種方式:可以參考【iOS】KVO方式監(jiān)聽數(shù)組的變化動態(tài)刷新tableView

第二種方式:

要知道KVO的底層實現(xiàn)原理是動態(tài)的添加中間類,并且在監(jiān)聽的屬性設(shè)置(set)方法中插入了willChangeValueForKeydidChangeValueForKey方法,那么我們可以手動調(diào)用這兩個方法,以發(fā)出屬性變化通知。這樣實現(xiàn)起來就很簡單。

//要監(jiān)聽的數(shù)組,不可變數(shù)組也一樣
@property (nonatomic, copy) NSMutableArray *array;

//在想要發(fā)出array變化的地方調(diào)用
[self willChangeValueForKey:@"array"];
//這邊模擬元素內(nèi)容變化,實際上調(diào)用了`willChangeValueForKey`和`didChangeValueForKey`方法不管數(shù)組內(nèi)容有沒有變化都會告知監(jiān)聽者
 [self..array addObject:@"piaojin"];//可以增加,修改,刪除,只要記得調(diào)用`willChangeValueForKey`和`didChangeValueForKey`方法
 [self didChangeValueForKey:@"array"];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 本文結(jié)構(gòu)如下: Why? (為什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等開會閱讀 1,736評論 1 21
  • 本文由我們團隊的 糾結(jié)倫 童鞋撰寫。 文章結(jié)構(gòu)如下: Why? (為什么要用KVO) What? (KVO是什么...
    知識小集閱讀 7,488評論 7 105
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 24,829評論 8 183
  • 上半年有段時間做了一個項目,項目中聊天界面用到了音頻播放,涉及到進度條,當時做android時候處理的不太好,由于...
    DaZenD閱讀 3,109評論 0 26
  • 時間的本質(zhì)就是摧毀一切。 重建一切,孵化一切,塑造一切,創(chuàng)造一切,成就一切,主宰一切,收割一切,哈哈,總之,太厲害...
    覺知中的帆閱讀 195評論 0 0

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