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>
m文件如下:
@implementation TestAppDelegate- (void) processSuccessful: (BOOL)success{if (success) {NSLog(@"成功");}else {NSLog(@"失敗");} }@end由于submitOrder方法是可選的,所以我們可以只實現processSuccessful。
Protocol一般使用在哪些場景呢?Objective-C里的Protocol和Java語言中的接口很類似,如果一些類之間沒有繼承關系,但是又具備某些相同的行為,則可以使用Protocol來描述它們的關系。不同的類,可以遵守同一個Protocol,在不同的場景下注入不同的實例,實現不同的功能。其中最常用的就是委托代理模式,Cocoa框架中大量采用了這種模式實現數據和UI的分離。例如UIView產生的所有事件,都是通過委托的方式交給Controller完成。根據約定,框架中后綴為Delegate的都是Protocol,例如UIApplicationDelegate,UIWebViewDelegate等,使用時大家可以留意一下,體會其用法。
使用Protocol時還需要注意的是:
1、Protocol本身是可以繼承的,比如:
@protocol A-(void)methodA; @end @protocol B <A>-(void)methodB; @end如果你要實現B,那么methodA和methodB都需要實現。
2、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是你必須深入了解和值得學習的一門語言,希望以后有機會多寫一些相關的文章。
轉載于:https://www.cnblogs.com/killiancheung/p/4635142.html
總結
- 上一篇: 常用html标签
- 下一篇: UITableVIew的性能优化-重用原