首页 > 代码库 > OC协议的简单理解

OC协议的简单理解

新建一个工程,工程里面有Person, dog,blackman三个类,person需要找个人来帮他盖房子。

分析:dog是动物,肯定不会造房子,blakman,或许可以建房子,那程序如何判断blackman,dog能否建房子?那我们就需要一个东西来限定/指定他们的属性,这就是协议咯,协议在我看来就是一个可以限定/指定一些对象属性的东西,所以现在我们现在新建一个名为delegate的类

@protocol onedelegate <NSObject>//创建一个协议@required//required下面的方法得实现,不然会报错-(void)nengGaiFangzi;//定义“能盖房子”的这么个方法@end

给blackman挂上协议,并实现协议中定义的方法,说明blackman具有盖房子这个属性,协议挂在@interface后面

#import <Foundation/Foundation.h>#import "delegate.h"@interface BlackMan : NSObject <onedelegate>

 

#import "BlackMan.h"@implementation BlackMan- (void)nengGaiFangzi{}- (int)call:(NSString *)name{    NSLog(@"%@", name);        return 123;}@end

在person的头文件加入如下代码

#import <Foundation/Foundation.h>#import "delegate.h"#import "BlackMan.h"@interface person : NSObject@property (nonatomic, weak) id<onedelegate> delegate;//定义一个person的属性,该属性必须实现了onedelegate这个方法@property (nonatomic, strong) BlackMan *man;- (void)print;@end

在viewcontrller实现我们找人盖房子的功能

#import "ViewController.h"#import "person.h"#import "Dog.h"#import "BlackMan.h"@interface ViewController (){    }@end@implementation ViewController            - (void)viewDidLoad {    [super viewDidLoad];       person *p = [[person alloc] init];//先定义一个对象,才能调用属性//    //    Dog *dog = [[Dog alloc] init];//可以初始化////    p.delegate = dog;//因为DOG类没加我们的协议,它不具备盖房子属性,更没盖房子的方法,而delegate属性必须实现协议,协议里有盖房子的方法,这个代码肯定报错,        BlackMan *man = [[BlackMan alloc] init];    p.delegate = man;    [p.delegate nengGaiFangzi];    //    p.man = man;    [p print];