Objective-C虽然存在很多看似令人费解的写法,但是实际上Objective-C是一门非常优雅的语言。在拥有C/C++语言的基础上,通过一周的学习以及适应,就可以掌握这一门语言。
2。1。1 Objective-C 观察者模式简介文献综述
KVO是Objective-C实现观察者模式的一种方法,KVO的实现依赖于Objective-C强大的Runtime。
KVO提供了一系列方法,当程序指定了一个被观察对象以后,当这个对象的某一个属性发生改变的时候(一定是对象属性的指针地址发生了改变),对象会得到通知,并且执行相应的函数。而且程序中不需要给被观察对象额外增添代码,使用KVO就能简单的实现观察者模式。
采用MVC设计架构的项目,KVO机制能够轻松的实现模型Mode和视图View之间的通讯,并且不需要额外的代码。
2。1。2 观察者模式实现原理
Apple 使用了 isa 混写(isa-swizzling)来实现 KVO 。当观察的对象为A对象时,KVO机制能够动态的创建出一个新的类: NSKVONotifying_A的新类,该类继承自对象A的本类,且KVO为NSKVONotifying_A重写观察属性的setter 方法,新的setter方法会在原setter方法调用之前之后,通知所有观察对象属性的值更改(需要指针地址发生改变)的情况。
NSKVONotifying_A类剖析:在这个过程中,被观察对象的isa指针从A类指向了系统新创建的NSKVONotifying_A,这样便可以实现监听A类属性值的改变,从而在属性值改变时通知被观察对象,并且执行相应的方法。
所以我们在使用KVO机制的时候,更本不会想到系统会动态的创建新的类,系统依赖Objective-C强大的Runtime机制,隐瞒了KVO底层实现的过程,将创建的新的类隐藏了起来,当我们创建一个名为NSKVONotifying_A的类的时候,运行到注册KVO代码的时候,系统就会崩溃,原因就是NSKVONotifying_A的类名称已经被占用,系统无法在动态的创建名为NSKVONotifying_A的类。
移动安防系统iOS客户端的设计与实现(3):http://www.youerw.com/jisuanji/lunwen_200695.html