通知:
1.“一对多”,“多对一”传值
2.应用场景: 一对多传值的时候。 相隔多层的控制器之间传值的时候。
3.使用通知需要注意的是,控制器销毁的时候一定记得移除通知,项目中的通知尽量越少越好,通知多了比较难控制,很有可能发出了通知有别的控件监听到了从而做出相应操作
4.对于通知来说,通知的发送者根本不管接收者是否收到通知,也不管收到通知之后做什么操作,发送者只管发送,发送之后跟他没有一毛钱的关系了。
代理:
1.“一对一传值”
2.应用场景:一般用过公共接口,比如tableview的dalegate。
3.代理要注意的是:单例对象不能用代理! 使用代理之前需要先用respondsToSelector方法判断其代理是否符合了协议,防止程序崩溃。
4.代理比较注重过程信息的传输,比如需要知道 消息是否开始发送,是否收到消息,是否消息发送完成。
block:
1. 跟代理一样 “一对一传值”
2. 应用场景: 网络请求回调,动画,GCD。。。。
3. 重中之重就是需要注意block的循环引用!
4. block比较注重结果,需要知道是否成功。
代理和block的对比:
代理成本低,而block成功很高。因为block要将数据从栈内存拷贝到堆内存,当用完或者block置为nil的时候才会被消除。 而delegate只是存储了一个对象指针,没有额外消耗。
代理需要 定义协议方法,代理实现协议方法,代理需要写很多,而且必须建立代理关系才能通信,而block就简单很多,代码比较简洁,干净。
由于block更简便,在创建的时候就区分了来源,而代理需要区分识别来源,所以苹果官方推荐而且越来越多的使用block,至于它的性能问题,开发者不用考虑过多,苹果会处理好。
时间: 2024-10-16 15:51:16