美文网首页
关于通知、代理和block

关于通知、代理和block

作者: FindCrt | 来源:发表于2016-07-25 11:52 被阅读121次

之前有写对delegate的思考:关于iOS中委托(Delegate)的几点看法,这三个东西的探索是无止境的,一个问题又勾起了思考。。。问题在这

为什么我们使用多播代理而不使用通知呢?
多播代理的具体应用场景有哪些?

1、我了解到的解释是:通知会造成干扰,比如你要下载A、B、C三个图片,A下载完了,发出通知,B和C图片的等待通知的地方也会收到,但其实它们不需要。

我感觉这个问题是可以被处理的,只要给每个任务加上对应的标识就好了,比如上面的下载图片情况,通知名设为“loadImage_”+url的最后一节 就可以了。而且通知可以指定发送者

  • (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSString *)aName object:(nullable id)anObject;

最后一个参数就是指定发送者
2、我觉得随便用,都可以。只是用代理有点好处:委托的方法名是已经定义好的,在接口定义上明确,你知道要传什么参数,对于合作开发或者造轮子都会更好。通知一般就是靠userinfo来传参数,这是一个无指定类型的字典,不确定里面的数据结构,不是很明确。

3、其实我觉得最好的还是用block或闭包。

多委托,需要加入到数组里,造成强引用,可能会有循环引用问题。
我觉得block写起来比较爽,可以把回调后的代码就写在旁边,比如下载图片,
var name:string = "xxx"
downloadImageWithCompleteHander:{
//回调后的逻辑可以直接写在这里
//可以直接使用这个临时变量name,因为block的copy性质
}
而委托你还要去在另写一个方法,特别是有些参数需要传递,用delegate就得把那些临时变量页也给搞成成员变量了,否则无法跨越方法使用

最后block有很好的隔离性质。
比如使用一个单例来管理所有的图片下载,假设叫loadManager,这时使用多委托,还是要区分不用的下载任务,因为所有的下载任务都到loadManager这个一个东西上了,它的多委托列表里包含不同下载任务的委托,还是要做区分。但是使用block,就可以自然的隔离开,这个解释比较复杂,就是block互相嵌套、从一开始就是隔离开的,看下SDWebImage的代码就清楚了。

相关文章

  • 关于通知、代理和block

    之前有写对delegate的思考:关于iOS中委托(Delegate)的几点看法,这三个东西的探索是无止境的,一个...

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

  • 代理/通知/block

    一:通知(NSNotification) 1.通知的发布 2.通知的监听 3.通知的移除 通知的监听需要在发布之前...

  • 代理,通知,Block

    1.三者的传值对应关系。 我们说通知是”一对多”的关系。 而代理和Block通常是”一对一”的关系。 Block的...

  • 通知,Block,代理

    OC中经常要用到一些事件和参数的传递,通常有三种做法:通知 代理 Block 通知可以一对多,代理 通知 Blo...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • 代理,通知,block

    代理的使用: 代理是一对一.首先要在需要传递值的类中声明一个协议 在这个类中定义一个delegate的属性,谁是它...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • RAC

    代理、通知、block、kvo、Target都属于响应式编程 ReactiveObjc和通知有点像,但是RAC里创...

  • 代理Delegate、Block、通知的优缺点,Block和代理

    代理 优点: 1.代理语法清晰,可读性高,易于维护2.它减少代码耦合性,使事件监听与事件处理分离3.一个控制器可以...

网友评论

      本文标题:关于通知、代理和block

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