已经好一段时间没有写iOS了,我决定不能忘了这个技能,每天拿出一点时间来学习一下苹果方面的知识,KVO观察者这个东西能提供一种简单的方法实现两个对象间的同步,model和view之间同步等吧。还可以用key paths来观察属性,因此也可以观察嵌套对象。
那么我为什么要学习kvo呢 ?因为苹果新出的WKWebView对h5兼容、性能以及新特性的支持还有自带的内置手势,总之如果用WKWebView来实现js的交互会有一种原生的效果吧 !!我觉得是这样!WKWebView与h5之间的交互就用到了kvo这种监听方式。
自己百度查阅了一下kvo的方法,动手写了一个小demo 给大家分享一下:
这里呢我特地查阅了一下,苹果为什么要@dynamic来修饰才能进行KVO,@dynamic表示该属性的存取都由 runtime 在运行时来决定,由于 Swift 基于效率的考量默认禁止了动态派发机制,因此要加上该修饰符来开启动态派发;除此之外,在 NSObject 子类中几乎没有属性默认是使用 @dynamic 修饰(该关键字最常见场景是在 Core Data 里,NSManagedObject子类的属性都是 dynamic 的),所以若想对某个属性进行观察,还必须在当前的子类中 override 该属性,override 时,采用 super 的实现即可。
必须是NSObject:观察者和被观察者都必须是 NSObject 的子类,因为 OC 中KVO的实现基于 KVC 和 runtime 机制,只有是 NSObject 的子类才能利用这些特性
具体的可以看http://www.jianshu.com/p/e036e53d240e
记得以前用delegate 跟通知的时候就算没有deinit 也不会报错,但是今天在写的KVO的时候也没有写 (懒了) 哈哈 !! 最后报了错误!所以大家记得注销监听哟
希望明天有空能把WKWebView的交互学会分享给大家吧 !!