objective-c(协议)

objective-c中不支持多重继承,其替代方案为Protocal(协议),下面给出一个基本实例:

  • 定义一个协议
@protocol MyProtocal <NSObject> //协议本身也可以嵌套,如protocal1<protocal2>

//在OC 2.0后协议增加了required和optional两个修饰符标示是否必须要实现这个接口
//未实现要求的接口,在xcode下回提示warning
@required
-(void) printId:(int)id; //@optional -(void) printName:(NSString*) name; @end
  • 定义一个类遵循这个协议
#import <Foundation/Foundation.h>
#import "MyProtocal.h"
@interface ClassA : NSObject<MyProtocal>{ //遵循这个协议,此处可以遵循多个,如<protocal1,protocal2....>
    int _id;
    NSString *_name;
}

@property int _id;
@property NSString *name;

-(void) printId:(int)id;

@end
  • 测试代码
#import <Foundation/Foundation.h>
#import "ClassA.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        ClassA *tmp = [[ClassA alloc]init];
       
        if([tmp conformsToProtocol:@protocol(MyProtocal)]== YES){ //判断某个实例是否遵循这个协议
            NSLog(@"conforms MyProtocal");
            [tmp printId:1];
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Fredric-2013/p/4297024.html