【OC学习-22】协议和代理双剑合璧——中介找房的代理模式

(1)什么是协议

协议其实是一种接口,创建出来给类(类1)调用,而其他类(类2)可以通过这个协议可以和类1进行通信。所以说它类似于一种接口,实现类和类之间的互动。


一个类可以遵循多个协议,一般我们协议的方法都是必须要实现的。


父类的协议,子类继承的话同样要遵守并实现。


协议也有继承关系,基协议是<NSObject>,如果A协议遵守B协议,A类遵循A协议的时候也必须要遵循并实现B协议。


(2)创建协议

通过New File >>> Objective-C protocol创建。只生成一个.h文件。在这个.h文件里面写方法,分两种@required和@optional,一个是必须实现的方法,另一个是可选实现的方法,默认是required,这种分类方法类似于实例变量的分类。

#import <Foundation/Foundation.h>
//<NSObject>可以省略,不像定义子类、类目和扩展等必须要有父类
@protocol hi <NSObject>
@optional
-(void)optional1;
//默认是required,即如果不写optional则都是required
@required
-(void)required1;
@end

(3)使用协议

在某一个类的.h文件里加<协议名>,就相当于已经引用了。然后在类的.m文件里实现协议的方法。

//在ASStudent.h类中
#import <Foundation/Foundation.h>
#import "hi.h" //要引入这个文件
@interface ASStudent : NSObject
//以下语句就表明调用了协议,如有多个,用逗号,隔开<hi1,hi2>
<hi>;
@end


//在ASStudent.m文件里
#import "ASStudent.h"

@implementation ASStudent
//如下语句就是实现协议
-(void)optional1{
    
}
-(void)required1{
    
}
@end

注意事项:

a:一般直接在类的.h文件中@protocol开头写协议,不要单独创建一个.h文件,然后引用和在.m文件里实现即可。

b:如果这个协议需要很多的类去遵守,那就单独定义一个.h文件。

c:还可以在声明变量的时候让变量遵守某个协议如Person<OneProtocol>*p1=[[Person alloc]init];用万能指针id时,变量前面的*需去除。

d:还有中常用的时在@property定义变量是让变量遵守某个协议,如@property(nonatomic,strong)Person<OneProtocol>*p1;


(4)代理与协议

代理就是,让别人帮我做某件事情,可以理解为两个类之间的互动,这种互动正好用到协议。协议和代理天生好基友。

形象解说:协议就像是一个授权合同,比如类A让类B帮自己找租房。但是这个“授权合同”只是一张合同(即有方法),但合同是死的不能自己去找租房(即没有实现),但是类B得到这个授权合同(即引入协议),利用自己有一套如何找房子的方法(即实现这个协议里面定义的那些方法)就能达到一些目的如找到房子。


(5)代理与协议的主要用法

利用协议,类A调用另一个类B的方法,并且如果这个类B的方法有返回值的话,类A就可以得到这个返回值,并且利用if判断语句得到不同的结果。这就是一个类的反应影响另一个类的结果的应用思想。


总结:很重要,但最好结合实例学习,在此知道书写格式和整个逻辑关系即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值