iOS 協(xié)議Protocol

概述

協(xié)議(Protocol)類似一個(gè)類的接口怀伦,不同的是協(xié)議沒有父類,也不能定義實(shí)例變量山林。

只聲明房待,不實(shí)現(xiàn)。
協(xié)議只能定義公用的一套接口,但不能提供具體的實(shí)現(xiàn)方法桑孩。也就是說拜鹤,它只告訴你要做什么,但具體怎么做不關(guān)心流椒。具體的實(shí)現(xiàn)要在遵守這個(gè)協(xié)議的類中實(shí)現(xiàn)敏簿。

基本作用

  • 聲明若干個(gè)方法(不能聲明成員變量)
  • 只要某個(gè)類遵守了這個(gè)協(xié)議,就擁有了該協(xié)議中的所有方法聲明宣虾,類對象 可直接調(diào)用方法
  • 只要父類遵守了某個(gè)協(xié)議惯裕,其子類也跟著遵守
  • 和java中的“接口”很相似,但功能更豐富
  • 一個(gè)類可以遵循多個(gè)協(xié)議
  • 協(xié)議可以遵守協(xié)議绣硝。一個(gè)協(xié)議遵守了另一個(gè)協(xié)議轻猖,就可以擁有另一份協(xié)議中的方法聲明

協(xié)議可以用@property形式聲明屬性,只不過只有對應(yīng)的setter/getter方法聲明域那,并沒有生成對應(yīng)的成員變量

基協(xié)議

<NSObject>是基協(xié)議咙边,是最根本的協(xié)議,其中聲明了很多最基本的方法次员,如description败许,retainrelease淑蔚。建議每個(gè)新協(xié)議都要遵守NSObject協(xié)議

NSObject是一個(gè)基類市殷,是最基本的類,任何其他類最終都要繼承它刹衫。

使用

1醋寝、定義協(xié)議
可定義在單獨(dú).h文件中,也可用定義在某個(gè)類中

@protocol PDCustomProtocol <NSObject>

//在此聲明方法
- (void)playFootball;

@required (默認(rèn))
- (void)playBasketball;

@optional
- (void)run;

@end
  • 修飾方法的關(guān)鍵字
    @required:要求遵循協(xié)議的類必須實(shí)現(xiàn)带迟,否則會發(fā)出警告音羞,但不報(bào)錯(cuò)。
    @optional :不要求實(shí)現(xiàn)仓犬,不實(shí)現(xiàn)也不會有警告嗅绰。

如果這個(gè)協(xié)議只用在某個(gè)類中,應(yīng)該把協(xié)議定義在該類中
如果這個(gè)協(xié)議用在很多類中搀继,就應(yīng)該定義在單獨(dú).h文件中

新建Protocol文件:


image.png

image.png

就會生成一個(gè).h文件

2窘面、遵守協(xié)議
首先要#import "協(xié)議文件名.h"或者@protocol 協(xié)議名稱。但是使用后者時(shí)只是告訴下面代碼這是一個(gè)協(xié)議叽躯,但不知道協(xié)議里面有什么東西财边。
一般只在用到協(xié)議內(nèi)容的時(shí)候在#import。在實(shí)際開發(fā)中常用@protocol 協(xié)議名稱点骑。

  • 類遵守協(xié)議
@interface 類名 : 父類名 <協(xié)議名稱1, 協(xié)議名稱2>

@end

如:

@interface Person : NSObject <PDCustomProtocol>

@end
  • 協(xié)議遵守協(xié)議
@protocol 協(xié)議名稱 <其他協(xié)議名稱1, 其他協(xié)議名稱2>

@end
  • 限制對象遵守某個(gè)協(xié)議
    定義一個(gè)變量的時(shí)候酣难,可以限制這個(gè)變量保存的對象遵守某個(gè)協(xié)議们童。如果沒有遵守協(xié)議,編譯器會警告鲸鹦。
    類名<協(xié)議名稱> *變量名;
NSObject<MyProtocol> *aObject;
或
@property (nonatomic, strong) Dog<MyProtocol> *dog;

應(yīng)用

protocol可以用于存儲方法聲明慧库,可以將多個(gè)類中共有的方法抽取出來,以后讓這些類遵守協(xié)議即可

Protocol與繼承的區(qū)別

繼承連同方法的實(shí)現(xiàn)也繼承了馋嗜,而protocol只有聲明沒有實(shí)現(xiàn)齐板;
相同類型的類可以使用繼承,但不同類型的類只能使用protocol

Protocol與Category的區(qū)別

Category可以給一個(gè)類擴(kuò)充方法葛菇,既有申明也有實(shí)現(xiàn)甘磨;而Protocol只有聲明,沒有實(shí)現(xiàn)眯停。
同:CategoryProtocol都可以聲明方法济舆,不能聲明屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莺债,一起剝皮案震驚了整個(gè)濱河市滋觉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌齐邦,老刑警劉巖椎侠,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異措拇,居然都是意外死亡我纪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門丐吓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浅悉,“玉大人,你說我怎么就攤上這事券犁∈踅。” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵族操,是天一觀的道長苛坚。 經(jīng)常有香客問我比被,道長色难,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任等缀,我火速辦了婚禮枷莉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尺迂。我一直安慰自己笤妙,他們只是感情好冒掌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹲盘,像睡著了一般股毫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上召衔,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天铃诬,我揣著相機(jī)與錄音,去河邊找鬼苍凛。 笑死趣席,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的醇蝴。 我是一名探鬼主播宣肚,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悠栓!你這毒婦竟也來了霉涨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤惭适,失蹤者是張志新(化名)和其女友劉穎嵌纲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腥沽,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逮走,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了今阳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片师溅。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盾舌,靈堂內(nèi)的尸體忽然破棺而出墓臭,到底是詐尸還是另有隱情,我是刑警寧澤妖谴,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布窿锉,位于F島的核電站,受9級特大地震影響膝舅,放射性物質(zhì)發(fā)生泄漏嗡载。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一仍稀、第九天 我趴在偏房一處隱蔽的房頂上張望洼滚。 院中可真熱鬧,春花似錦技潘、人聲如沸遥巴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铲掐。三九已至拾弃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摆霉,已是汗流浹背砸彬。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斯入,地道東北人砂碉。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像刻两,于是被迫代替她去往敵國和親增蹭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,376評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,100評論 1 32
  • OC語言基礎(chǔ) 1.類與對象 類方法 OC的類方法只有2種:靜態(tài)方法和實(shí)例方法兩種 在OC中磅摹,只要方法聲明在@int...
    奇異果好補(bǔ)閱讀 4,271評論 0 11
  • 2018年3月16日星期五晴 昨天晚上我手不小心被燙傷滋迈,疼一晚上,冷敷了近一夜户誓,雖沒有起泡饼灿,但整個(gè)手紅腫了,...
    昕媛1227閱讀 191評論 0 0
  • 時(shí)間總是過得很快。懵懵懂懂之間又過去了一年悼潭。人不能靠著記憶活一輩子庇忌。但是有時(shí)候沒有記憶就是忘記過去,總覺得是背叛了...
    天妒閱讀 303評論 1 1