KVO 觀察者模式

註冊

    [_textLabel addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];

_textLabel 被觀察者 被觀察者 必須是一個對象 (本人試過多次數組好像不行)
self 觀察者
options:

NSKeyValueObservingOptionNew 把更改之前的值提供給處理方法
NSKeyValueObservingOptionOld 把更改之後的值提供給處理方法
NSKeyValueObservingOptionInitial 把初始化的值提供給處理方法,一旦註冊,立馬就會調用一次。通常它會帶有新值,而不會帶有舊值。
NSKeyValueObservingOptionPrior 分2次調用。在值改變之前和值改變之後。

移除觀察者 必須移除

- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(nullable void *)context

監聽回調

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary<NSString*, id>*)change context:(nullable void *)context {
    if ([keyPath isEqualToString:@"count"]) {
        NSLog(@"");
    }
}
keyPatch 標記  通過這個來確定是哪一個觸發的方法
object 被觀察的對象
change 改變的值
context  附帶的參數 (可以強轉)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章