Swift3.0 中KVO(监听)的使用

iOS的KVO即是key-value observing。

1.建立在KVC之上的的机制。

2.主要功能是检测对象属性的变化。

3.这是一个完善的机制,不需要用户自己设计复杂的视察者模式。

4.对需要视察的属性要在前面加上dynamic关键字。

KVO的使用过程中需要注意的问题

1,在写swift的KVO的过程中,其不能监听基本数据类型的属性,若想监听需将其改成NSNumber类型,或其它类型,否则监听的代理方法不走。

2,在写swift的KVO的过程中,被监听的属性必须用“dynamic”修饰,否则监听的代理方法不走。

3,在写swift的KVO的过程中,要保证监听者和被监听者同时存在(考虑到其生命周期)。

4,在写swift的KVO的过程中,要确保最后移除观察者,防止内存泄

添加监听方法

view1?.addObserver(self, forKeyPath: "num", options: .new, context: &mycontext)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

print(change,keyPath,context)

if context == &mycontext {

print("yes")

if let newValue = change![NSKeyValueChangeKey.newKey]{

print("newValue",newValue)

}

}else{

super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)

}

}

移除监听

override func viewDidDisappear(_ animated: Bool) {

super.viewDidDisappear(animated);

//移除监听

//        self.removeObserver(self, forKeyPath: "age", context: &myContext);

//        self.removeObserver(self, forKeyPath: "age")

self.removeObserver(self, forKeyPath: "age", context: &mycontext)

}

你可能感兴趣的:(Swift3.0 中KVO(监听)的使用)