定义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是你必须深刻了解和值得学习的一门语言,但愿之后有机会多写一些相关的文章。