定義Protocol很簡單,在聲明文件(h文件)中經過關鍵字@protocol定義,而後給出Protocol的名稱,方法列表,而後用@end表示Protocol結束。在@end指令結束以前定義的方法,都屬於這個Protocol。例如:程序員
@protocol ProcessDataDelegate <NSObject> @required - (void) processSuccessful: (BOOL)success; @optional - (id) submitOrder: (NSNumber *) orderid; @end
以上代碼能夠單獨放在一個h文件中,也能夠寫在相關類的h文件中,能夠視具體狀況而定。該Protocol包含兩個方法,processSuccessful和submitOrder。這裏還有兩個關鍵字,@required和@optional,表示若是要實現這個協議,那麼processSuccessful方法是必需要實現的,submitOrder則是可選的,這兩個註解關鍵字是在Objective-C 2.0以後加入的語法特性。若是不註明,那麼方法默認是@required的,必須實現。框架
那麼如何實現這個Protocol呢,很簡單,建立一個普通的Objective-C類,取名爲TestAppDelegate,這時會生成一個h文件和m文件。在h文件中引入包含Protocol的h文件,以後聲明採用這個Protocol便可,以下:學習
@interface TestAppDelegate : NSObject<ProcessDataDelegate>; @end
用尖括號(<…>)括起來的ProcessDataDelegate就是咱們建立的Protocol。若是要採用多個Protocol,能夠在尖括號內引入多個Protocol名稱,並用逗號隔開便可。例如<ProcessDataDelegate,xxxDelegate>ui
m文件以下:代理
@implementation TestAppDelegate - (void) processSuccessful: (BOOL)success{ if (success) { NSLog(@"成功"); }else { NSLog(@"失敗"); } } @end
因爲submitOrder方法是可選的,因此咱們能夠只實現processSuccessful。orm
Protocol通常使用在哪些場景呢?Objective-C裏的Protocol和Java語言中的接口很相似,若是一些類之間沒有繼承關係,可是又具有某些相同的行爲,則可使用Protocol來描述它們的關係。不一樣的類,能夠遵照同一個Protocol,在不一樣的場景下注入不一樣的實例,實現不一樣的功能。其中最經常使用的就是委託代理模式,Cocoa框架中大量採用了這種模式實現數據和UI的分離。例如UIView產生的全部事件,都是經過委託的方式交給Controller完成。根據約定,框架中後綴爲Delegate的都是Protocol,例如UIApplicationDelegate,UIWebViewDelegate等,使用時你們能夠留意一下,體會其用法。繼承
使用Protocol時還須要注意的是:接口
一、Protocol自己是能夠繼承的,好比:事件
@protocol A -(void)methodA; @end @protocol B <A> -(void)methodB; @end
若是你要實現B,那麼methodA和methodB都須要實現。開發
二、Protocol是類無關的,任何類均可以實現定義好的Protocol。若是咱們想知道某個類是否實現了某個Protocol,還可使用conformsToProtocol進行判斷,以下:
[obj conformsToProtocol:@protocol(ProcessDataDelegate)]
好吧,具體的語言特性此次就介紹這麼多。從某種意義上來講,Objective-C是一門古老的語言,發明於1980年。1988年,喬布斯的Next公司得到了Objective-C語言的受權,並開發出了Objective-C的語言庫和NEXTSTEP的開發環境。NextStep是以Mach和BSD爲基礎,Objective-C是其語言和運行庫,後來的事你們都清楚,蘋果買了Next,喬布斯迴歸蘋果,開始神奇的蘋果振興之路,NextStep成了Max OS X的基礎。之後發展愈來愈好,Objctive-C成了Apple的當家語言,如今基本上是Apple在維護Objctive-C的發展。
在蘋果的AppStore推出以前,Objective-C一直相對小衆,可是其優秀的語言特性彷佛一直在爲後面的爆發積蓄力量,當蘋果平臺級的應用出現以後,Objective-C開始大放異彩,靜態語言的效率和動態語言的特性獲得衆多程序員的喜好,目前它已經以火箭般的速度躥升TIOBE語言排行版第四位。
對於喜好蘋果技術的技術人員來講,Objective-C是你必須深刻了解和值得學習的一門語言,但願之後有機會多寫一些相關的文章。