委托模式

一、什么是协议?

协议是多个类共同的公共行为规范,这个规范规定了类和类之间是如何交流的。协议里通常是定义一组公用的方法,但不会为这些方法提供实现,方法的实现交给遵从协议的类去完成。

二、类和类是如何通过协议实现交流的?

需要明白的是制定协议可以在一个单独的protocolName.h文件中制定,也可以在一个类内制定。只提供一组公共的方法(规范),不提供方法的具体实现。

具体步骤如下:(以protocolName.h为例)

第一步:创建协议文件,在协议文件内制定一组公用方法,就是规范。协议中的方法不强制实现,但有警告。可用@optional修饰,协议方法可选实现。

1、


2、

3、创建完成并添加协议方法



第二步:根据需要让相应的类(类0)创建协议指针,例如:id<protocolName>delegate;协议指针是用来调用协议方法的。创建了协议指针的类就是协议的制定者相当于与在类内创建协议。


第三步:根据协议让相应的类(类1,类2...)遵从协议,并实现协议中的方法。

第四步:设置代理,例如:类0对象.delegate = 类2对象。


简单的理解就是类1想要完成一个任务,但他没有这个能力,他想把这个任务委派给类2(或其它遵从了协议的类)去做。让别的类去完成就需要说明具体的任务,这个任务就是协议。每当类1做这个任务时就会去找遵从了协议的类帮忙,找好之后就把代理权给这个类,类0对象.delegate = 类2对象

如上截图可知,如果想自定义一个View,但view得许多属性需要根据情况来定,此时就可以用代理来实现,就像tableView,当你不知道要多少行,每行的高度等等内容时,不妨交给代理。



三、关于非正式协议

非正式协议是通过类别(catgory)实现的。类别以NSObject为基础,为NSObject创建类别指定应该新增的方法。因为NSObject是所有类的父类,所以其他类都会继承类别里新增的方法,这些方法就相当于一种规范。这种基于NSObject定义的类别即可认为是非正式协议。实现了方法的类就认为是遵从了协议并实现了协议方法。


四、协议可以多继承

OC在协议的遵守上允许使用多继承。但是协议只能提供接口,而没有提供实现。如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法。如果既需要多继承接口,又要多继承其实现,协议是无能为力的。







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值