新建一个工程,工程里面有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];
OC协议的简单理解
时间: 2024-10-14 22:08:10