iOS中数据通信常用的有notification delegate block 的三种方式
什么场景下需要哪种形式呢?
这三种都是实时的。
notification:特点: 一对多
最简单,最容易理解,但也最容易被滥用。管理起来并不方便。
使用这种方式,一般情况下,通知多方进行处理。或者不方便与消息接收方进行delegate,block方式的数据通信的时候。
比如项目中的登录,登陆成功后,有需要刷新首页,获得用户信息,账户信息,保存token等一系列的操作。涉及到数据层,界面层,等多方。
这种情况下,如果用delegate,block方式,就不方便。因为这两种是一对一的通信方式。
缺点:
1.使用完毕后,要时刻记得注销通知,否则将出现不可预见的crash。
2. key不够安全,编译器不会监测是否被通知中心正确处理。
3.调试的时候动作的跟踪将很难进行。
delegate: 一对一
缺点实现delegate 方法
层层委托,加大代码之间的耦合性
block: 一对一
闭包是一个能够访问其他函数内部变量的函数。
官方文档中也提到了几种Block的使用场合。
任务完成时回调处理
消息监听回调处理
错误回调处理
枚举回调
视图动画、变换
排序
1.语法简洁,实现回调不需要显示的调用方法,代码更为紧凑。
2.增强代码的可读性和可维护性。
3.配合GCD优秀的解决多线程问题。
优点:不需要实现delegate方法,直接在block里进行处理。
缺点:
1.Block中得代码将自动进行一次retain操作,容易造成内存泄露。
2.Block内默认引用为强引用,容易造成循环引用。