iOS開(kāi)發(fā):Objective-C中通知與協(xié)議的區(qū)別?

what is difference between NSNotification and protocol? (通知和協(xié)議的不同之處?)

我想大家都知道這個(gè)東西怎么用,但是更深層次的思考可能就比較少了吧,眾所周知就是代理是一對(duì)一的,但是通知是可以多對(duì)多的.但是為什么是這個(gè)樣子,有沒(méi)有更深的思考過(guò)這個(gè)問(wèn)題?

今天看了下網(wǎng)上的幾個(gè)視頻教程,KVO、KVC、謂詞、通知,算是開(kāi)發(fā)中的高級(jí)點(diǎn)的東西了。通知和協(xié)議都是類似于回調(diào)一樣,于是就在思考通知和協(xié)議到底有什么不同,或者說(shuō)什么時(shí)候該用通知,什么時(shí)候該用協(xié)議。

下面是網(wǎng)上摘抄的一段解釋:

協(xié)議有控制鏈(has-a)的關(guān)系,通知沒(méi)有。首先我一開(kāi)始也不太明白,什么叫控制鏈(專業(yè)術(shù)語(yǔ)了~)。但是簡(jiǎn)單分析下通知和代理的行為模式,我們大致可以有自己的理解簡(jiǎn)單來(lái)說(shuō),通知的話,它可以一對(duì)多,一條消息可以發(fā)送給多個(gè)消息接受者。代理按我們的理解,到不是直接說(shuō)不能一對(duì)多,比如我們知道的明星經(jīng)濟(jì)代理人,很多時(shí)候一個(gè)經(jīng)濟(jì)人負(fù)責(zé)好幾個(gè)明星的事務(wù)。只是對(duì)于不同明星間,代理的事物對(duì)象都是不一樣的,一一對(duì)應(yīng),不可能說(shuō)明天要處理A明星要一個(gè)發(fā)布會(huì),代理人發(fā)出處理發(fā)布會(huì)的消息后,別稱B的發(fā)布會(huì)了。但是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理。因此控制鏈(has-a從英語(yǔ)單詞大致可以看出,單一擁有和可控制的對(duì)應(yīng)關(guān)系。

1.通知:

通知需要有一個(gè)通知中心:NSNotificationCenter,自定義通知的話需要給一個(gè)名字,然后監(jiān)聽(tīng)。

優(yōu)點(diǎn):通知的發(fā)送者和接受者都不需要知道對(duì)方??梢灾付ń邮胀ㄖ木唧w方法。通知名可以是任何字符串。

缺點(diǎn):較鍵值觀察(KVO)需要多點(diǎn)代碼,在刪掉前必須移除監(jiān)聽(tīng)者。

2.協(xié)議

通過(guò)setDelegate來(lái)設(shè)置代理對(duì)象,最典型的例子是常用的TableView.

優(yōu)點(diǎn):支持它的類有詳盡和具體信息。

缺點(diǎn):該類必須支持委托。某一時(shí)間只能有一個(gè)委托連接到某一對(duì)象。

相信看到這些東西,認(rèn)真思考一下,就可以知道在那種情況下使用通知,在那種情況下使用代理了吧.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,591評(píng)論 0 6
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,604評(píng)論 30 472
  • 1.寫一個(gè)NSString類的實(shí)現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,872評(píng)論 2 37
  • 我出生在礦區(qū),所有礦區(qū)的職工子弟都住在一個(gè)大大的家屬院里。小時(shí)候最熟悉的交通工具是老式的帶梁自行車。爺爺喜歡把我放...
    陳朔閱讀 265評(píng)論 0 0
  • 愛(ài)美,是人的天性! 迫不及待地涂上了新指甲油,雖然跟想象中的效果不一樣,但是粉嫩粉嫩的效果,也覺(jué)得還有點(diǎn)好看,整個(gè)...
    一路李花開(kāi)閱讀 306評(píng)論 0 0

友情鏈接更多精彩內(nèi)容