为什么我们使用多播代理而不使用通知呢? 多播代理的具体应用场景有哪些?求大神指导
光阴似箭催人老,日月如移越少年。
好問題。 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的程式碼就清楚了。
好問題。
1、我了解到的解釋是:通知會造成乾擾,例如你要下載A、B、C三個圖片,A下載完了,發出通知,B和C圖片的等待通知的地方也會收到,但其實它們不需要。
我覺得這個問題是可以被處理的,只要給每個任務加上對應的標識就好了,比如上面的下載圖片情況,通知名設為“loadImage_”+url的最後一節 就可以了。而且通知可以指定發送者
2、我覺得隨便用,都可以。只是用代理有點好處:委託的方法名稱是已經定義好的,在介面定義上明確,你知道要傳什麼參數,對於合作開發或造輪子都會更好。通知一般就是靠userinfo來傳參數,這是一個無指定型別的字典,不確定裡面的資料結構,不是很明確。
3、其實我覺得最好的還是用block或閉包。
多委託,需要加入到陣列裡,造成強引用,可能會有循環引用問題。
我覺得block寫起來比較爽,可以把回調後的程式碼就寫在旁邊,像是下載圖片,
而委託你還要去在另寫一個方法,特別是有些參數需要傳遞,用delegate就得把那些臨時變數頁也給搞成成員變數了,否則無法跨越方法使用
最後block有很好的隔離性質。
例如使用一個單例來管理所有的圖片下載,假設叫loadManager,這時使用多委託,還是要區分不用的下載任務,因為所有的下載任務都到loadManager這個一個東西上了,它的多委託列表裡包含不同下載任務的委託,還是要做區分。但是使用block,就可以自然的隔離開,這個解釋比較複雜,就是block互相嵌套、從一開始就是隔離開的,看下SDWebImage的程式碼就清楚了。