概览
在上一篇文章中,我们已经了解了KVO的使用场景以及使用方法。作为Objective-c中异常强大和重要的特性,我们有必要去了解和探索KVO底层的实现机制。
KVO的实现机制到底是怎么样的呢?依据苹果官方文档的介绍:
Automatic key-value observing is implemented using a technique called isa-swizzling.
The is a pointer, as the name suggests, points to the object’s class which maintains a dispatch table. This dispatch table essentially contains pointers to the methods the class implements, among other data.
When an observer is registered for an attribute of an object the isa pointer of the observed object is modified, pointing to an intermediate class rather than at the true class. As a result the value of the isa pointer does not necessarily reflect the actual class of the instance.
You should never rely on the isa pointer to determine class membership. Instead, you should use the class method to determine the class of an object instance.
KVO是对Objective-c观察者模式的实现,也是OC非常强大和有用的特性,同时还是实现cocoa bndings的基础(-bind:toObject:withKeyPath:options:
)。因此,理解和掌握KVO可以给我们带来很多便利以及意想不到的效果。
KVO可以让观察者在被观察者的属性被修改时直接接收到通知。在KVO的作用下,一个对象可以观察另一个对象的任何属性,同时,也可以知道某个属性的修改前和修改后的值。对多关系的观察者不仅能知道改变发生的类型,而且还能知道哪些对象被改变了。
在通知机制中,KVO与NSNotification
提供的通知机制类似,但是也存在很鲜明的区别。NSNotification
是以广播的形式将通知传递给所有注册为观察者的对象,即“一对多”,而KVO则会在属性值发生改变时直接将通知传递给观察者,即“点对点”。
在Mac平台下做开发也有一段时间了,虽然说相对于windows平台而言,Mac下的软件资源并不如windows下的那么丰富,但是在适应以及找到合适的软件后,我觉得Mac对我而言更适合做开发。对于开发人员来说,效率至上是毋庸置疑的,因此,拥有一套提升效率的软件和工具对于开发人员来说是至关重要的。这篇博客就记录下我自己开发的workflow,也希望通过这篇博客能与他人分享。
Homebrew
Homebrew之于Mac的关系就跟apt之于Linux的关系是一样的,它实际上是Mac下的套件管理器。比如你想安装MySQL、git等等工具软件,都可以使用homebrew来下载和管理。
homebrew的安装也非常方便,你可以去到它的官网,根据提示进行安装。安装成功后就使用homebrew的命令去下载和管理你需要的工具软件了。