OC 协议与代理

协议

定义

oc的协议有点类似java中的接口,当某个类使用也该协议就必须实现协议中所定义的方法,实际上不定义也不会报错,但会发出警告,在代码运行中如果没有实现协议中的方法,那么就会报错,因为找不到此方法。除此之外协议可以多继承,类似接口的多继承。

可以说协议是一种规范的定义,如果某个类使用了这个协议就需要遵守这份协议(实现协议中的方法)。

关键字

@protocol 协议名 < 父协议名>
//默认中声明的方法也是需要实现的,不然会发出警告
@required //缺省属性,必须要实现
@property (nonatomic,assign)int a;
@optional // 可选实现
@required 缺省属性,被他修饰的方法是必须要实现的;
@optional 可选属性,被他修饰的方法可以不实现

在协议中我们不能声明变量,但是我们可以使用属性的方法:
@property (nonatomic,assign)int a;
在协议遵守方中要实现这个,也是在.h文件中粘贴一些这条语句,系统自动会给我们生产set和get方法。

协议多继承

两种方法

  • 协议名<协议1,协议2 >

  • 类名< 协议1,协议2 >


代理

代理模式是实现两个对象之间的交互的一种机制。在代理模式中涉及到两个对象,一个是主动方一个是被动方。
主动方:拟定协议,创建一个携带协议的 id 指针(指向某个具体的代理);
被动方:遵守协议,实现协议的方法。

针对面向对象思想中的协议的作用

  • 类似java中的接口回调,在android中经常使用监听者设计模式实现对某个事件的监听,再通过接口回调实现监听者触发的动作,oc的代理就可以实现这个功能。

  • 还有另一种作用就是,类A他在做某件事时,但在这件事中他有些地方(如: 事件小a)无法自己完成需要有第三方(类B)来完成事件小a,那么类 B就需要实现事件小a,从而使类 A完成这件事。类A与类B 间就存在一种委托关系,或说是代理。

  • 还可以用来做配置,比如类A 是sdk的提供方,那么它使用的是一些默认配置当,类B作为sdk的使用方,在使用类A提供的sdk时遵守类A提供的协议,就可以自定义实现协议规范。

常用做法:
在协议使用方中:添加属性

@property (nonatomic,strong) id<ProtocolTest2> delegate;

在使用协议中的方法可以先进行 SEL判断是否实现了

//例:
if([self.delegate respondsToSelector:@selector(study)])
        [self.delegate study];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值