首页 > 代码库 > 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];
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。