OC中的protocol

类似于java中的interface接口类,没有含有抽象方法,让实现它的类,必须实现其中的方法

OC中的协议(protocol):

1 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现
2 2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明
3 3)只要父类遵守了某个协议,那么子类也遵守
4 4)Protocol声明的方法可以让任何类去实现,protocol就是协议
5 5)OC不能继承多个类(单继承)但是能够遵守多个协议,继承(:),遵守协议(<>)
6 6)基协议:<NSObject>基协议,是最根本最基本的协议,其中声明了很多最基本的方法
7 7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一个协议中的方法声明

protocol的使用流程

协议的使用流程:
    定义协议--->在类中采用指定的协议--->实现协议中的方法(注意方法有必须实现和选择实现两种)

    定义协议:
            @protocol 协议名称<NSObject>
                //方法声明列表
            @end;
            
            注意:协议默认的要采纳NSObject的协议

    采纳协议:
            1)类遵守协议
                某个类遵守某个协议
                @interface 类名 : 父类 <协议名称>
                @end

                某个协议遵守某个或者某些协议,一个协议可以遵守其他多个协议,多个协议之间用逗号  , 隔开.
                @protocol 协议名称 <其他协议名称1,其他协议名称2>
                @end
            2)  协议遵守协议
                @protocol 协议名称<其他协议名称>
                @end;

创建协议

protocol中的@required 和 @optiona 的使用

 1 @required和 @optiona是协议方法声明中的两个关键字
 2 它们主要用于控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流
 3 @required:这个方法必须要实现(若不实现,编译器会发生警告)
 4 @optional:这个方法可以选择实现(不实现,编译器不会发生警告)
 5 其实没什么价值,因为无论哪个修饰,无论实不实现,IOS是弱语法都不会对运行产生影响
 6     
 7         例: 
 8             @protocol RunProtocol<NSObject>
 9 
10             @required
11                 -(void)run;
12             @optional
13                 -(void)eat;
14             @end    

protocol类型限制

 1 1.使用id存储对象时,对象的类型限制
 2 
 3         格式; id<协议名称> 变量名
 4 
 5     
 6         例:      @property (nonatomic,strong) id <MyProtocol> person;
 7                     //标示传入的对象 必须实现了指定的协议
 8 
 9 2.对象赋值时类型限制
10         使用类也同样如此
11         格式: 类名<协议名称> *变量名
12         NSObject <Myprotocol> *obj;
13 
14 3.对象关联关系下,对象的类型限制
15     

protocol代理设计模式

1 代理模式概念:
2     传入的对象,代替当前类完成了某个功能,成为代理模式
3 
4 采用协议实现代理模式的主要思路为:
5        1)定义一个协议,里面声明代理类需要实现的方法列表,比如这里一个代理类需要实现meetingNotify与businessTrip方法
6         2)创建一个代理类(比如PersonAssistant,BossAssistant),遵守上面的代理协议
7         3)在需要代理的类中(Person),定义一个对象类型为id 且遵守代理协议的成员变量
8         4)在Person类中调用成员变量_delegate(代理)的方法,调用代理类的方法
9         5)main.m或其他使用Person类的文件中,为Person类的成员变量(代理类)赋值

protocol代理模式应用场合

1 1)监听器的场合
2 2)通知的场合
3 3)有写事情,不想自己处理,想交给别人处理

 protocol引用问题

 1 @class 代表这是一个类,具体引用在.m文件中 #import 进行导入
 2 
 3 同样 protocol 也可以这样
 4 在.h文件中
 5         @protocol workProtocol;//告诉编译器这是一个协议
 6         @interface Person :NSObject <workProtocol>
 7                                                    //这里会报一个Cannot find protocol的警告,可以不用理会
 8 
 9         @end    
10 
11 要实现的时候在.m文件中
12         #import "workProtocol.h"
13 
14 引入2:
15     也可以在类的.h文件中直接引入带实现
16     @protocol runProtocol <NSObject>
17         -(void) run;
18     @end
19     
原文地址:https://www.cnblogs.com/developer-wang/p/4506531.html