IOS 协议

一、协议

        在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法。熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范。也就是说在ObjC中@protocol和其他语言的接口定义是类似的,只是在ObjC中interface关键字已经用于定义类了。

(一)协议注意几点:

        1、一个协议可以扩展自另一个协议,例如有的协议是扩展自NSObject,如果需要扩展多个协议中间使用逗号分隔;

        2、和其他高级语言中接口不同的是协议中定义的方法不一定是必须实现的,我们可以通过关键字进行@required和@optional进行设置,如果不设置则默认是@required(注意ObjC是弱语法,即使不实现必选方法编译运行也不会报错);

        3、协议通过<>进行实现,一个类可以同时实现多个协议,中间通过逗号分隔;

        4、协议的实现只能在类的声明上,不能放到类的实现上(也就是说必须写成@interface Person:NSObject<AnimalDelegate>而不能写成@implementation Person<AnimalDelegate>);

        5协议中不能定义属性、成员变量等,只能定义方法;

        事实上在ObjC中协议的更多作用是用于约束一个类必须实现某些方法,而从面向对象的角度而言这个类跟接口并不一定存在某种自然关系,可能是两个完全不同意义上的事物,这种模式我们称之为代理模式(Delegation)。在Cocoa框架中大量采用这种模式实现数据和UI的分离,而且基本上所有的协议都是以Delegate结尾。


(二)协议定义:


        @protocol  协议名

        声明方法

        @end


        备注:但是我们还看到两个特殊关键字 @required  和 @optional

        @required 表示我们用到这个协议的时候必须实现这个协议的方法

        @optional 表示我们可选择性实现这些方法,看那个需要我们就去实现,不需要的就不实现


二、协议和委托的关联:


(一) 协议

        (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法

        (2)在任何一个类中,只有声明了协议,都可以实现协议里的方法。

        (3)协议不是一个类,更没有父类了。

        (4)协议里面的方法经常都是一些委托方法


(二) 委托

        委托是一种设计模式,是一种设计思想。

        委托,故名思议就是托别人办事。打个比方:

        张三迫切需要一分工作,但是不知道去哪找。于是他就拜托(委托)李四给帮找一份合适工作,但是托人办事得给被人好处啊,于是张三给李四塞了一个红包(协议),于是李四通过自己关系在某公司找了一份文秘的工作(实现协议里面委托方法),于然后他把文秘这份工作给了张三,张三就找到工作了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值