代理
代理是一种软件设计模式
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可以添加图片啥的
网友评论