由于OC单继承,所以如果不想改动原有类(生成子类),那么可以使用协议来扩展原有的类。
OC的协议可以定义方法,遵守协议的类必须实现这些方法。
调用方式和C++模板类一样
@import Foundation; @protocol myProtocol_1 <NSObject> //协议 -(void) print_1: (int) param1 Setparam2: (int) param2; @end @protocol myProtocol_2 <NSObject> -(void) print_2; @end @interface classA : NSObject<myProtocol_1,myProtocol_2> //遵守两个协议 @end @implementation classA -(void) print_1:(int)param1 Setparam2:(int)param2 { printf("111111 %d and %d ", param1 , param2); } -(void) print_2{ printf("2222 "); } -(void) print{ NSNumber *x = @4242; NSLog(@"%@ ", x); } @end int main(int argc, char* argv[]) { classA * val = [classA new]; [val print]; [val print_1: 5 Setparam2: 7]; [val print_2]; printf("%ld", [val retainCount]); [val release]; return 0; }
可以看到,classA类实现了myProtocol1和myProtocol2两个协议,声明方式为classA : NsObject<myPro1,myPro2> {....}