KVO監聽容器類(陣列,字典等)屬性的兩種方法

weixin_33866037發表於2019-01-09

kvo大家都會用.原理百度一大堆.這篇文章主要介紹監聽容器類屬性變化的方法.
程式碼截圖


4635951-f5ccd462d4b49a2a.png
WX20190109-111417@2x.png

程式碼很詳細
網上大多數是第一種方法,需要把陣列包裝一層.然後新增或者刪除時需要做特殊處理.
[[self.person mutableArrayValueForKeyPath:tempArrayTwoType] addObject:XXX];
[[self.person mutableArrayValueForKeyPath:tempArrayTwoType] removeObject:XXX];

第二種方法是取消自動通知,採用手動通知的方式.
點選按鈕 列印結果 第一次和第二次截圖


4635951-af47ba465115303c.png
WX20190109-111458@2x.png
4635951-abc0721ca01d9715.png
WX20190109-111512@2x.png

大家會發現觀察者代理方法裡列印的結果不一致,原因是因為修改型別不一致. kind值就是這個型別.


4635951-0c46b0da208de7c6.png
WX20190109-111929@2x.png

還有其他卻別是.手動通知更加靈活.可以在需要的時機進行通知.不用新建物件將陣列包裝一層.

相關文章