——黑马程序员——OC中正式协议protocol的用法总结

-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

OC中正式协议protocol的用法总结

一、protocol基本概念

 OC中的接口是通过protocol来实现,在OC中 interface 只是一个类的的头文件的声明,并不是真正意义上的接口

正式协议 protocol必须让一个类实现某一个方法,协议是许多方法声明,没有实现

二、protocol的使用流程

定义协议——> 在类中采用指定的协议——> 实现协议中的方法(方法有必须实现和选择实现两种)




1、定义协议

@protocol 协议名称 <NSObject> // 默认遵守NSObject 协议

// 方法的声明列表

@end

协议默认要采纳NSObject的协议

2、采纳协议

(1)类采纳协议

创建类的时候遵守某个或者某几个协议,需要先导入头文件

@interface 类名 :父类 <协议名称1 ,协议名称2 >

@end

(2)协议遵守协议

@protocol 协议名称  <其他协议名称>

@end

(3)多个协议之间用逗号 ,隔开

@protocol 协议名称 < 其他协议名称1,其他协议名称2>

@end

3、协议实现

协议的实现有两种,必须实现和选择实现

如果一个类遵守了某个协议,则需要在这个类的实现(.m)文件中,实现协议的方法就可以

三、OC中的协议 protocol 使用注意

1、当遵守了某个协议后,就相当于这个类有了协议中所有方法的声明

2、protocol 用来声明许多方法的,不能写实现、不能声明成员变量

3、父类遵守了某个协议,那么子类也遵守

4、protocol 声明的方法可以让任何类实现,protocol 就是协议

5、OC中不能继承多个类(单继承)但是能遵守多个协议

6、基协议:<NSObject>是基协议,其中声明了很多基本方法

7、协议可以遵守协议,一个协议遵守了另一个协议就可以拥有另一份协议中的方法声明

8、类如果采纳协议后,实现了协议的方法,这些方法可以被子类继承

四、协议(protocol)中@required和@optional的使用

1、@required:这个方法必须要实现,默认都是 @required 必须要实现的,不实现方法时会报错,编译不能通过

2、@optional:这个方法选择实现,不实现方法时不会报错,编译时有警告,运行时出错

五、协议@protocol的类型限制

1、可以增加类型限制。例如 :id <协议的名称> 对象名 ;表示赋值只能遵守此协议的值

2、第二种类型限制,类型名 <协议名称> 对象名;

六、id类型和instancetype区别

1、id能作为方法或者函数的返回值、参数类型,也能用来定义变量

2、instancetype只能作为函数或者方法的返回值

3、instancetype 能精确的限制返回值得具体类型,如果函数返回值类型和接收值不一致时会报出警告

七、@protocol的代理模式

代理模式:传入的对象代替当前的类完成了某个功能,称为代理模式

利用协议实现代理模式的主要思路为:

1、定义一个代理协议,里面声明代理类需要实现的方法列表,

2、创建一个代理类,遵守这个代理协议协议

3、在需要代理的类中,定义对象  类型为 id 类型  且遵守代理协议的成员变量

4、在需要代理的类中调用成员变量(代理)的方法,调用代理类的方法

5、main .m或者其他使用需要代理的类文件中,对需要代理的成员变量赋值

八、protocol 代理模式的应用场合

1、监听器的场合

2、通知的场合

3、有些事情不想自己处理,交给别人处理的场合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值