標籤:
好好學習,天天向上。
閱讀地址:http://www.cocoachina.com/ios/20150927/13525.html
如有侵權,請告知,馬上刪除。
黑色為摘抄片段,紅色為自己的理解。
1.大多數delegate protocols 都擁有幾個訊息源。
例如:需要的block需要的參數不同,複用造成意義不明。
這個時候使用delegate比較合適。
其實通過定義多個block也能實現,並且多個block也能定義不同的名字。但是如果訊息源實在太多的話,還是利用delegate更加合適。
2.一個對象只能有一個delegate。
如果一個對象是單例,不要使用delegation。
每個對象只有一個delegate,但是如果需要把訊息傳遞給多個人的話,每次都需要設定代理,並且遵守協議,並實現方法,使代碼增多。這種情況下如果使用block,回調的訊息只會進最近執行的一個方法的block中,代碼量縮小很多。
3.一般的delegate方法會有傳回值
如果對象的請求帶有附加資訊,更應該使用delegation
block回調不通過return返回結果。而是通過參數來進行返回如下,本應如此。
- (void)doSomeThingComplete:(void(^)(NSData *data))complete
{
dispatch_queue_t queue = dispatch_queue_create("test", NULL);
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"test"];
NSData *data = [NSData dataWithContentsOfURL:url];
if(complete) {
complete(data);
}
});
}
- (void)test
{
[self doSomeThingComplete:^(NSData *data) {
NSLog(@"%@",data);
}];
}
4.過程 vs 結果(Process vs. Results)
delegate的回調更多的面向過程,而block則是面向結果的。
如果你使用block去請求一個可能失敗的請求,你應當只使用一個block。
通過block或者delegate其實都可以回調出個個階段的資訊,但是在設計之初,block感覺就是用於簡化,略去過程的,所以block感覺正式面向結果的。
米花讀後感_開發選擇Block還是Delegate