iOS APP 开发 OC 第二十二天,Portocol

tags: OC 30 day

什么是Protocol?

作用:专门用来声明一大堆方法。(不能声明属性,也不能实现方法,只能用来写方法的声明)。只要某个类遵守了这个portocol。就相当于拥有这个portocol中的所有的方法声明。
如上图,只要某个类遵守了这个portocol,就相当于拥有了这个portocol的所以方法声明,而不用自己去定义。

portocol 声明

@protocol portocol名称 <NSObject>methods声明@end

新增一个portocol的方式。NewFile OC-File-protoco portocol的文件名: .h 并且只有一个 .h 文件。

在portocol的文件中,只能用来声明方法,portocol的作用:就是专门用来写方法声明的。

类遵守portocol

portocol是用写方法声明的,就是用来被类遵守的。

如果想要让一个类,拥有portocol中定义的所有的方法声明,那么就让这个类遵守这个portocol。
类只要遵守一个portocol,那么这个类就拥有了这些portocol中定义的所以的方法的声明了。

这个类只是拥有了这个portocol中的方法声明尔以。没有实现。所以这个类,就应该匙实现portocol中的方法。

类是单继承,但是portocol可以多个遵守

一个类只能有一个父类
但是一个类可以同时遵守多个portocol。

@interface 类名:父类名 <protocol1,portocol2>@end

当一个类遵守了多个portocol之后,就相当于这个类拥有了所有portocol中定义的方法声明。那么这个类,就应该实现所有portocol中的方法。

如果不实现,其实也不会报错,编译器只是会报警告。
但是当创建对象,来调用这个没有实现的portocol中的方法的时候,就会报错。

当一个类遵循portocol时,有的只有方法的声明,没有实现。要类自己去实现。

当一个类遵守了多个portocol之后,就相当于这个类拥有了所有portocol中定义的方法声明。但是仅仅只是有方法的声明而已,没有实现,要类自己去实现。

如果不实现,其实也不会报错,编译器只是会报警告。
但是当创建对象,来调用这个没有实现的portocol中的方法的时候,就会报错。

当一个类遵守了多个portocol之后,就相当于这个类拥有了所有portocol中定义的方法声明。也不会报错,只是给一个警告。

@requird 与 @optional

这两个修饰符是专门用来修饰portocol的方法。

@requird

在portocol中,如果方法的声明被@required修饰,那么遵守这个portocol的类必须要实现这个方法,否则编译器会发出警告。

@optional

在portocol中,如果方法的声明被@optional修饰,那么遵守这个portocol的类可以实现这个方法,也可以不实现这个方法,不实现编译器也不会发出警告。

其实,无论是@required还是@optional你都可以不实现。编译器是不会报错的,仍然可以编译执行。唯一的区别是:当遵守portocol的类不实现portocol中的方法时,@required会给一个警告,@optional没有。
这两个关键字的主要作用在于:工程师的沟通,告诉遵守portocol的类,哪些方法必须要实现,因为这些方法我会调用。

默认的状态为 @required

portocol 与 portocol 之间可以相互继承

继承的语法:

@portocol 名称 <父portocol>@end

效果:子portocol不但有自己的方法声明,还有父portocol中的所有方法声明。

NSObject

在Foundation框架中,有一个类叫做NSObject是所有OC类的基类。
在Foundation框架中,有一个Portocol,叫做NSObject

NSObject portocol 都被 NSObject 类遵守,所以NSObject portocol中的所有方法全部的OC类都有了,这么说。所有的OC类都遵守了NSObject portocol。NSObject portocol叫做基协议

类的名称可以跟portocol的名称一致。

写Portocol的规範

要求所有的portocol都必须要直接或是间接的从NSObject基协议继承。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章