扯淡
最近看了喵神的一篇面试文章:地址
针对十个问题进行的知识点的查漏补缺(百度谷歌)。
今天主要学习了两个点,记录下来,来加深记忆
- NSNotification 和 KVO
- protocol 和 delegate
正文
NSNotification 和 KVO 区别和用法
- 首先实现原理不同
NSNotification 实现原理:NSNotification实现原理和源码实现
KVO 实现原理:如何自己动手实现KVO
NSNotification 实现原理
a> NSNotificatinonCenter是使用观察者模式来实现的用于跨层传递消息,用来降低耦合度。
b>NSNotificatinonCenter用来管理通知,将观察者注册到NSNotificatinonCenter的通知调度表中,然后发送通知时利用标识符name和object识别出调度表中的观察者,然后调用相应的观察者的方法,即传递消息(在Objective-C中对象调用方法,就是传递消息,消息有name或者selector,可以接受参数,而且可能有返回值),如果是基于block创建的通知就调用NSNotification的block。
KVO 实现原理:
当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter 方法会负责在调用原 setter 方法之前和之后,通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。
原来,这个中间类,继承自原本的那个类。不仅如此,Apple 还重写了 -class 方法,企图欺骗我们这个类没有变,就是原本那个类。更具体的信息,去跑一下 Mike Ash 的那篇文章里的代码就能明白,这里就不再重复。
2.用法不同:
KVO 只需要在 被观察者中去 添加观察者 ,实现观察者回到方法即可;
NSNotificaton 则 多出了 发送通知 这么一步
protocol 和 delegate
先奉上链接 :p 菜鸟一大枚,我只是好文的搬运工🤣
protocol :
个人理解:
1.protocol 存在的意义 ,就是定义好一些接口,让不同的(遵守这个协议的)类能够去实现这些相同的接口
2.delegate 中也是用到了protocol ,不同之处是: delegate 是一个类委托另一个类去做一些自己不想做的事情(例如tableview)。
PS
回头看了一下发现全是链接哈哈囧rz,我只是代码的搬运工🤣,学习的脚步不敢停止,fighting!
网友评论