能否向Protocol中添加屬性县昂?

能,一般用的場合是陷舅,有兩個類A和B倒彰,如果A和B不是繼承關系,想給A和B增加幾個相同的屬性莱睁,可以實現(xiàn)一個協(xié)議C狸驳,加個屬性,然后讓A和B都遵循C協(xié)議就可以了缩赛。當然協(xié)議中只是聲明了屬性耙箍,在A和B里還要手動實現(xiàn)以下setter和getter方法才行。

協(xié)議中能夠聲明方法酥馍,以及屬性辩昆。然后問題就來了,不是不能定義成員變量的嗎旨袒?

對汁针,的確不能定義成員變量,但是屬性是什么砚尽?屬性包含了三個東西:成員變量施无、setter方法、getter方法必孤。在類中定義的屬性猾骡,當然三者都有,然而協(xié)議中定義的屬性只有獲取和設置方法敷搪,沒有成員變量兴想,這就要求該協(xié)議的遵守者必須自己寫出setter和getter方法的實現(xiàn)。但是有一種情況是不需要的赡勘,那就是遵守者本來就有這個屬性嫂便,此時系統(tǒng)會為這個屬性自動生成設置獲取方法,既然已經實現(xiàn)了闸与,那么遵守者就沒必要去實現(xiàn)協(xié)議中的這個屬性了毙替。

盡管可以實現(xiàn)“偽屬性”,但是践樱,我們還是應該盡量把屬性定義在主接口中厂画,而不應該定義在協(xié)議中。

還有一點映胁,也是很重要的一點木羹,為什么自定義的協(xié)議后面會有這么一個東西<NSObject>?

協(xié)議也能繼承。既可以繼承自自定義的協(xié)議,也可以繼承自系統(tǒng)的協(xié)議坑填。
我們在定義協(xié)議的時候抛人,一般都是直接繼承自<NSObject>,為什么系統(tǒng)要默認讓協(xié)議繼承自這個協(xié)議呢脐瑰?

因為這個協(xié)議中定義了一些基本的方法妖枚,由于我們使用的所有類都繼承NSObject這個基類,而這個基類遵守了<NSObject>這個協(xié)議苍在,那么也就實現(xiàn)了其中的那些方法绝页,這些方法當然可以由NSObject及其子類對象調用,但是在不知道遵守者類型的時候需要用到id <協(xié)議名>這樣的指針寂恬,這個指針在編譯期并不知道自己指向哪個對象续誉,唯一能調用的便是協(xié)議中的方法,然而有時候又需要用一些基本的方法初肉,比如要辨別id <協(xié)議名>這個指針所指的對象屬于哪個類酷鸦,就要用到-isMemberOf:這個方法,而這個方法是<NSObject>這個協(xié)議中的方法之一牙咏,所以臼隔,我們自定義的協(xié)議都需要繼承<NSObject>。本段一開始便說道:<NSObject>中的方法在NSObject基類中實現(xiàn)了妄壶,那么無需再關心實現(xiàn)了摔握,直接調用<NSObject>中的方法吧。

需要注意的問題

根據(jù)約定丁寄,框架中后綴為Delegate的都是Protocol氨淌,例如UIApplicationDelegate,UIWebViewDelegate等狡逢。
Protocol本身是可以繼承的宁舰,比如:

@protocol A
    -(void)methodA;
@end
@protocol B <A>
    -(void)methodB;
@end

如果你要實現(xiàn)B,那么methodAmethodB都需要實現(xiàn)奢浑。

Protocol是與任何類都無關的,任何類都可以實現(xiàn)定義好的Protocol腋腮,如果我們想知道某個類是否實現(xiàn)了某個Protocol雀彼,那么我們可以用conformsToProtocol:方法進行判斷:

[obj conformsToProtocol:@protocol(ProcessDataDelegate)]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市即寡,隨后出現(xiàn)的幾起案子徊哑,更是在濱河造成了極大的恐慌,老刑警劉巖聪富,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莺丑,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機梢莽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門萧豆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昏名,你說我怎么就攤上這事涮雷。” “怎么了轻局?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵洪鸭,是天一觀的道長。 經常有香客問我,道長温圆,這世上最難降的妖魔是什么嚷量? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拾枣,結果婚禮上,老公的妹妹穿的比我還像新娘盒让。我一直安慰自己梅肤,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布邑茄。 她就那樣靜靜地躺著姨蝴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肺缕。 梳的紋絲不亂的頭發(fā)上左医,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音同木,去河邊找鬼浮梢。 笑死,一個胖子當著我的面吹牛彤路,可吹牛的內容都是我干的秕硝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼洲尊,長吁一口氣:“原來是場噩夢啊……” “哼远豺!你這毒婦竟也來了?” 一聲冷哼從身側響起坞嘀,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤躯护,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后丽涩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棺滞,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了继准。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枉证。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锰瘸,靈堂內的尸體忽然破棺而出刽严,到底是詐尸還是另有隱情,我是刑警寧澤避凝,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布舞萄,位于F島的核電站,受9級特大地震影響管削,放射性物質發(fā)生泄漏倒脓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一含思、第九天 我趴在偏房一處隱蔽的房頂上張望崎弃。 院中可真熱鬧,春花似錦含潘、人聲如沸饲做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盆均。三九已至,卻和暖如春漱逸,著一層夾襖步出監(jiān)牢的瞬間泪姨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工饰抒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肮砾,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓袋坑,卻偏偏與公主長得像仗处,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咒彤,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容