block、delegate、notification对比

block、delegate、notification使我们常用的用来在类之间进行回调的方式,我们需要在不同的情况下选择合适的方案,首先我们需要先了解下这3中方式的不同。

block

block也就是代码块,类似C语言中的指针函数。

  • block的特点:
    1.block可以使代码的逻辑更清晰,可读性更强(当然有的用法可能会起反作用)。
    2.block可以不进行命名,相对delegate,block的创建和使用更简洁。
    3.能够直接访问上下文,可以减少临时存储数据的需要。

  • block的缺点:
    1.比其他两种方式更消耗性能,使用外部变量时需要复制一份,占用内存。
    2.只能实现一对一。

  • block使用的注意点:
    1.要注意循环引用。

delegate

delegate也就是代理,我们通过@protocol来声明。

  • delegate的特点:
    1.一个delegate里面可以定义多个方法,适合两个类之间的有多种不同情况的回调的情况,并且可以设置回调是否必须实现。
    2.委托者可以接受被委托者的执行方法后的返回值(比如UITableView中section数量等方法)。
    3.一个类中可以实现多个delegate,每个代理可以有自己的方法。

  • delegate的缺点:
    1.相较block和notificaiton,delegate的步骤更加繁琐。
    2.只能实现一对一(当然也有一对多的多播代理的方案)。

  • delegate使用注意点:
    1.使用时应将属性设为weak,防止循环引用。

Notification

notification也就是通知。

  • notification的特点:
    1.可以实现多对多的消息传递,可以给多个对象发送消息,也可以接受多个对象的消息。
    2.不需要两个对象之间存在逻辑关系,实现功能的代码最简洁。
    3.是一种零耦合的消息传递方式,可以实现完全解耦。

  • notification的缺点:
    1.管理繁琐,需要注意通知的注销和注册。
    2.需要对name和userinfo有明确的说明,随着使用数量增多会提升维护的难度。
    3.发送者不能得到接收者的反馈结果。
    4.调试过程中难以追踪,需要在所有的可能接收消息的地方进行排查。
    5.发送过程是全局的,如SDK等需要隐藏实现细节的情况下,会暴露你的实现细节

你可能感兴趣的:(block、delegate、notification对比)