iOS基礎(chǔ):協(xié)議使用的一些理解

近期在看SD的源碼的時(shí)候,看到了下面這個(gè)寫法:

id operations = operationDictionary[key];
if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){
    [(id<SDWebImageOperation>) operations cancel];
}

可能是我代碼看的還不夠多,對(duì)于這樣[(id<SDWebImageOperation>) operations cancel]的寫法還是第一次見(jiàn)。(協(xié)議難道不都是和代理一起用的嗎!!)于是好奇的我決定了解一下這種寫法。
首先operations是遵守<SDWebImageOperation>協(xié)議的, operationsid類型的,它是從operationDictionary中取出來(lái)的。通常情況下,它是一個(gè)SDWebImageCombinedOperation類型的對(duì)象。(特殊情況也會(huì)是一個(gè)數(shù)組,里面還是一堆SDWebImageCombinedOperation類型的對(duì)象,當(dāng)然sd也做了處理,我就不細(xì)說(shuō)了。)

?下面先看看<SDWebImageOperation>這個(gè)協(xié)議:

@protocol SDWebImageOperation <NSObject>
- (void)cancel;
@end

很簡(jiǎn)單,就申明了一個(gè)方法。

再看看SDWebImageCombinedOperation類:

@interface SDWebImageCombinedOperation : NSObject <SDWebImageOperation>

果然是遵守<SDWebImageOperation>協(xié)議的。那么就應(yīng)該能在他的.m文件找到- (void)cancel;方法的實(shí)現(xiàn)。
果然,我們可以找到。

cancel實(shí)現(xiàn).png

但是我把上面的代碼去掉協(xié)議申明改成這樣[operations cancel];,還是能成功調(diào)用。原因就是在于當(dāng)我們得到operations的時(shí)候,他已經(jīng)是一個(gè)遵循<SDWebImageOperation>協(xié)議的對(duì)象了。所以不管調(diào)用cancel的時(shí)候是否有寫明,問(wèn)題都不大。

現(xiàn)在還有最后一個(gè)疑問(wèn),為什么不直接在SDWebImageCombinedOperation的.h文件中聲明- (void)cancel;方法,這樣不就可以直接調(diào)用了而避開(kāi)了協(xié)議嗎。
大佬告訴我了:這樣寫的目的是為了方便。當(dāng)有幾十個(gè)類都要有- (void)cancel;方法時(shí)候,如果不用協(xié)議方法,就需要在幾十個(gè)類中都聲明方法。而用協(xié)議,只需要遵守,就可直接開(kāi)始實(shí)現(xiàn)了。

當(dāng)然我仍有不服,那為什么不直接來(lái)個(gè)父類再繼承呢。
大佬耐心說(shuō)道:如果你已經(jīng)開(kāi)發(fā)一半,難道再新建父類嗎。或者這么多類都是雜七雜八的,也不能都繼承同一個(gè)類。

雖然覺(jué)得有道理,但感覺(jué)還是不太舒服。如果你看到這篇文章又有自己的理解,請(qǐng)告訴我。謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,520評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 178,362評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,805評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,541評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,896評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 43,062評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,608評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,356評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,555評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,769評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,175評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,489評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,289評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,516評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容

  • 技術(shù)無(wú)極限,從菜鳥(niǎo)開(kāi)始,從源碼開(kāi)始。 由于公司目前項(xiàng)目還是用OC寫的項(xiàng)目,沒(méi)有升級(jí)swift 所以暫時(shí)SDWebI...
    充滿活力的早晨閱讀 12,679評(píng)論 0 2
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,354評(píng)論 0 6
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問(wèn)題 3.指南認(rèn)識(shí) 4.解決思路 ios開(kāi)發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽(yáng)光的大男孩兒閱讀 5,015評(píng)論 0 13
  • 18號(hào) 葉春平(簡(jiǎn)書:葉老巫) 圖、文:葉老巫 一、 我,70后老青年。 第一學(xué)歷是中專(中師),中國(guó)第一批小中專...
    葉兩步閱讀 839評(píng)論 13 34
  • 人家是眼一閉一睜,一天過(guò)去了,我是往沙發(fā)上一躺一天就過(guò)去了。
    不知是誰(shuí)閱讀 292評(píng)論 1 3