delegate和Notification的區別

來源:互聯網
上載者:User

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後就什麼都不管了也不會等待接受者的反應。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.