1. 程式人生 > >delegate和Notification的區別

delegate和Notification的區別

               

delegate針對one-to-one關係,並且reciever可以返回值給sender;

notification 可以針對one-to-one/many/none,reciever無法返回值給sender;

所以,delegate用於sender希望接受到reciever的某個功能反饋值,notification用於通知多個object某個事件。

delegate主動,notification被動

1.

Delegate:
訊息的傳送者(sender)告知接收者(receiver)某個事件將要發生,delegate同意然後傳送者響應事件,delegate機制使得接收者可以改變傳送者的行為。通常傳送者和接收者的關係是直接的一對多的關係。

Notification:
訊息的傳送者告知接收者事件已經發生或者將要傳送,僅此而已,接收者並不能反過來影響傳送者的行為。通常傳送者和接收者的關係是間接的多對多關係。

2.

很早stepwise上有一篇很經典的文章抓沒講delegate和notificationde的區別的,不過很遺憾現在stepwise下線了。
簡單說,
1. 效率肯定是delegate比nsnotification高。
2. delegate方法比notification更加直接,最典型的特徵是,delegate方法往往需要關注返回值,也就是delegate方法的結果。比如-windowShouldClose:,需要關心返回的是yes還是no。所以delegate方法往往包含should這個很傳神的詞。也就是好比你做我的delegate,我會問你我想關閉視窗你願意嗎?你需要給我一個答案,我根據你的答案來決定如何做下一步。相反的,notification最大的特色就是不關心接受者的態度,我只管把通告放出來,你接受不接受就是你的事情,同時我也不關心結果。所以notification往往用did這個詞彙,比如NSWindowDidResizeNotification,那麼nswindow物件放出這個notification後就什麼都不管了也不會等待接受者的反應。