您的位置:首页 > 移动开发 > IOS开发

iOS开发:协议与代理

2016-04-07 13:44 218 查看
一、什么是协议?

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

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

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

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

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

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

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

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

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



三、关于非正式协议

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

四、协议可以多继承

OC在协议的遵守上允许使用多继承。但是协议只能提供接口,而没有提供实现。如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法。如果既需要多继承接口,又要多继承其实现,协议是无能为力的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: