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

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

(1)什么是协议

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

(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文件里实现即可


(4)代理与协议

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

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


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

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


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

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