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)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容