ios - 多播代理和通知的优缺点
大家讲道理
大家讲道理 2017-04-18 09:24:50
0
1
482

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(1)
左手右手慢动作

好問題。
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的程式碼就清楚了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板