(1)什麼是協議
(2)如何定義協議
(3)如何使用協議
(1)什麼是協議
1、多個對象之間協商的一個接口對象。
2、提供一系列的方法來在協議的實現者和代理者之間的一種通信。
3、類似於c++中 純虛函數,或java中的接口。
(2)如何定義協議
1、只有頭文件
2、方法定義
@protocolMyprotocol
- (void) init;
- (int) updata:(int)time;
@end
3、協議中不是每個方法都要實現的。
@required [方法必須實現]
@optional [方法可以實現、缺省]
協議需要繼承於 基協議NSObject
協議可以多繼承
@protocolMyprotocol
@optional
- (void) init;
@required
- (int)>
一個簡單協議例子
協議使用例子:
怎麼知道shwoinfo這個方法是否寫了。
5、判斷某個對象是否響應方法
動態判斷某個方法是否實現了。
if( [test respondsToSelector:@selector(showInfo:)] )
{
[test>YES;
}
(3)如何使用協議
創建一個協議:
#import@protocol Myprotocol @optional - (void) printValue:(int)value; @required - (int) printValue:(int)value1 andValue:(int)Value2; @end
// // TestProtocol.h // TestPortocal // // Created by ccy on 13-12-21. // Copyright (c) 2013年 ccy. All rights reserved. // #import#import "Myprotocol.h" @interface TestProtocol : NSObject { } - (void) testValue:(int) Value; @end
// // TestProtocol.m // TestPortocal // // Created by ccy on 13-12-21. // Copyright (c) 2013年 ccy. All rights reserved. // #import "TestProtocol.h" @implementation TestProtocol - (void) testValue:(int) Value { NSLog(@"testValue value: %d\n", Value); } - (int) printValue:(int)value1 andValue:(int)Value2 { NSLog(@"printValue value1: %d,value2:%d\n", value1,Value2); return 0; } - (void) printValue:(int)value { NSLog(@"printValue %d\n", value); } @end
// // main.m // TestPortocal // // Created by ccy on 13-12-21. // Copyright (c) 2013年 ccy. All rights reserved. // #import#import "TestProtocol.h" //#import "Myprotocol.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); TestProtocol * testPtcl = [[TestProtocol alloc] init]; [testPtcl testValue:2]; [testPtcl printValue:30 andValue:40]; //判斷方法有沒有實現 SEL sel = @selector(printValue:); if( [testPtcl respondsToSelector:sel]) { [testPtcl printValue:20]; } [testPtcl release]; //用協議方式實現 id myprotocol = [[TestProtocol alloc] init]; [myprotocol printValue:103]; [myprotocol release]; } return 0; }