美文网首页
Extension和Category的区别

Extension和Category的区别

作者: 昵称是乱起的 | 来源:发表于2019-01-21 15:58 被阅读40次

一般Extension都放在宿主类的.m文件中,用来声明一些私有成员变量、私有属性、私有方法

Extension和Category区别主要在于以下三点
  • Category是运行时决议生效的,Extension是编译时就决议生效的
  • Category可以为系统类添加分类,Extension不能
  • Category是有声明和实现,Extension是直接写在宿主类的.m文件中,只有声明
代理

代理通过代理模式实现的,代理方实现委托方声明的方法,代理方强引用委托方,委托方弱引用代理方,避免循环引用,代理是1对1传递

通知

通知是使用观察者模式实现的用于跨层消息传递的机制,是1对多传递
具体的实现机制可以参考GNU里面的实现,结合里面的实现方式描述个大体思路,NSNotificationCenter里面有一个全局的字典,字典的key值就是通知名称,value值是一个数组,数组里面保存着observers,当postNotification的时候,就是发送一条消息到通知中心,然后通知中心遍历observers数组,调用observer的代理方法,从而实现了一对多的通知。

代理和通知的主要区别

代理是通过代理模式实现的,一对一
通知是通过观察者模式实现的,一对多

相关文章

网友评论

      本文标题:Extension和Category的区别

      本文链接:https://www.haomeiwen.com/subject/gpjcjqtx.html