KVO監聽不到屬性變化原因分析(KVC、KVO、self.、_)

故事描述:很久很久以前,在狗ali邊上有一家公司,在這家公司有一個帥氣的高大的頭發長且茂盛的iOS軟件工程師,有一天他要做一個直播的需求,直播接的七牛云的SDK,他想去通過KVO去監聽SDK中 session對象的焦點發生改變的回調。但是沒卵用,這個iOS就在想,為什么呢,是我寫的不對嗎,他就換個屬性監聽,發現沒問題啊,然后我就查閱資料,發現了一個驚天大秘密 (未完待續...)

回憶:這個帥氣的iOS就在想,KVO 的流程 和原理
KVO通過某個對象的某個值 觸發 【change value for key】時,觸發回調
那 會不會是 賦值時沒有觸發 KVC
然后試了一下 某個對象的 self.age = 100; 和 _age = 100;
發現前者可以 監聽到 后者 不能
這個帥氣的iOS就又再想 這本質有啥區別呢,他就想到老師講的:
self.age (屬性)會讓實例變量 觸發 setter 和 getter 方法 setter:[self setAge:100]
_age 只是個實例變量 訪問時比屬性訪問快

科普:
KVC的全稱是Key-Value Coding(鍵值編碼),是由NSKeyValueCoding非正式協議啟用的一種機制,對象采用這種機制來提供對其屬性的間接訪問,可以通過字符串來訪問一個對象的成員變量或其關聯的存取方法(getter or setter)

結論 _age沒有觸發 setter 和 getter ,所以KVO 監聽不到KVC 變化
所以這個驚天大秘密就是:狗七牛寫Bug! he~ tui ~

完.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。