Protocol

Protocol,簡單來講就是一系列不屬於任何類的方法列表,其中聲明的方法能夠被任何類實現。這種模式通常稱爲代理(delegation)模式。你經過Protocol定義各類行爲,在不一樣的場景採用不一樣的實現方式。在iOS和OS X開發中,Apple採用了大量的代理模式來實現MVC中View和Controller的解耦。

定義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是你必須深刻了解和值得學習的一門語言,但願之後有機會多寫一些相關的文章。

相關文章
相關標籤/搜索