2-3 通知

iOS Notification实现原理

代理

代理是一种软件设计模式 
iOS 中以@protocol 形式体现
传递时一对一 通知时一对多

@require 必须实现【不写 编译器会出现警告】  @optional 可以实现也可以不实现

使用weak 来避免循环引用。

通知

通知底层  其实是通过KVO实现的
KVO 一般是在同一个页面 监听某一个值的变化
通知是多个页面

实现原理:
没有源码 我是这样猜测的:
通过Map表 [字典]。Name对应 将所有添加的通知放入一个数组里面 【有要调用的函数】

然后发通知的时候 我们 循环调用就好 

区别

1. 实现模式不同
通知是通过 观察者模式实现的
代理是通过代理模式实现的

为什么移除通知

iOS8及以前,NSNotificationCenter持有的是观察者的unsafe_unretained指针(可能是为了兼容老版本),这样,在观察者回收的时候未removeOberser,而后再进行post操作,则会向一段被回收的区域发送消息,所以出现野指针crash。而iOS9以后,unsafe_unretained改成了weak指针,即使dealloc的时候未removeOberser,再进行post操作,则会向nil发送消息,所以没有任何问题

iOS10通知(七)--Notification Content Extension

可以实现推送页面的 UI
iOS10添加了 新的推送UI可以添加图片啥的

你可能感兴趣的:(2-3 通知)