一般Extension都放在宿主类的.m文件中,用来声明一些私有成员变量、私有属性、私有方法
Extension和Category区别主要在于以下三点
- Category是运行时决议生效的,Extension是编译时就决议生效的
- Category可以为系统类添加分类,Extension不能
- Category是有声明和实现,Extension是直接写在宿主类的.m文件中,只有声明
代理
代理通过代理模式实现的,代理方实现委托方声明的方法,代理方强引用委托方,委托方弱引用代理方,避免循环引用,代理是1对1传递
通知
通知是使用观察者模式实现的用于跨层消息传递的机制,是1对多传递
具体的实现机制可以参考GNU里面的实现,结合里面的实现方式描述个大体思路,NSNotificationCenter里面有一个全局的字典,字典的key值就是通知名称,value值是一个数组,数组里面保存着observers,当postNotification的时候,就是发送一条消息到通知中心,然后通知中心遍历observers数组,调用observer的代理方法,从而实现了一对多的通知。
代理和通知的主要区别
代理是通过代理模式实现的,一对一
通知是通过观察者模式实现的,一对多
网友评论