KVO,俗稱「鍵值監聽」,能夠用於監聽某個對象屬性值的改變。對象
1.新建一個Person類,設置一個age屬性。get
2.建立兩個Person的實例對象,對第一個Person實例對象的age屬性設置KVO進行監聽。io
3.打印設置監聽後的兩個Person實例對象的isa,發現第一個person對象的isa是NSKVONotifying_Person,第二個person對象的isa是Person。class
4.爲何第一個person對象的isa會被改變?變量
KVO利用Runtime API動態生成一個子類,而且讓實例對象的isa指向這個全新的子類。 當修改實例對象的屬性時,會調用Foundation的_NSSetXXXValueAndNotify函數方法
1>willChangeValueForKeyim
2>調用父類的setqq
3>didChangeValueForKeydi
didChangeValueForKey內部會觸發監聽器的監聽方法(observeValueForKeyPath:ofObject:change:context:)
1.如何手動觸發KVO?
手動調用willChangeValueForKey:和didChangeValueForKey:能夠觸發KVO。
2.直接修改爲員變量會觸發KVO麼?
直接給成員變量賦值,不通過set方法,是不會觸發KVO的。
3.本文若有侵犯隱私或其餘請聯繫我,我將在第一時間整改或刪除。