OC 30 day
作用:专门用来声明一大堆方法。(不能声明属性,也不能实现方法,只能用来写方法的声明)。只要某个类遵守了这个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。
@interface 类名:父类名 <protocol1,portocol2>
@end
当一个类遵守了多个portocol之後,就相当於这个类拥有了所有portocol中定义的方法声明。那麽这个类,就应该实现所有portocol中的方法。
如果不实现,其实也不会报错,编译器只是会报警告。
但是当创建对象,来调用这个没有实现的portocol中的方法的时候,就会报错。
当一个类遵守了多个portocol之後,就相当於这个类拥有了所有portocol中定义的方法声明。但是仅仅只是有方法的声明而已,没有实现,要类自己去实现。
如果不实现,其实也不会报错,编译器只是会报警告。
但是当创建对象,来调用这个没有实现的portocol中的方法的时候,就会报错。
这两个修饰符是专门用来修饰portocol的方法。
在portocol中,如果方法的声明被@required修饰,那麽遵守这个portocol的类必须要实现这个方法,否则编译器会发出警告。
在portocol中,如果方法的声明被@optional修饰,那麽遵守这个portocol的类可以实现这个方法,也可以不实现这个方法,不实现编译器也不会发出警告。
其实,无论是@required还是@optional你都可以不实现。编译器是不会报错的,仍然可以编译执行。唯一的区别是:当遵守portocol的类不实现portocol中的方法时,@required会给一个警告,@optional没有。
这两个关键字的主要作用在於:工程师的沟通,告诉遵守portocol的类,哪些方法必须要实现,因为这些方法我会调用。
默认的状态为 @required
继承的语法:
@portocol 名称 <父portocol>
@end
效果:子portocol不但有自己的方法声明,还有父portocol中的所有方法声明。
在Foundation框架中,有一个类叫做NSObject是所有OC类的基类。
在Foundation框架中,有一个Portocol,叫做NSObject
NSObject portocol 都被 NSObject 类遵守,所以NSObject portocol中的所有方法全部的OC类都有了,这麽说。所有的OC类都遵守了NSObject portocol。NSObject portocol叫做基协议
类的名称可以跟portocol的名称一致。
要求所有的portocol都必须要直接或是间接的从NSObject基协议继承。
<<: 安全框架和成熟度模型(Security Frameworks and Maturity Models)
>>: [DAY16]跟 Vue.js 认识的30天 - Vue 过渡(转场)及动画效果上篇(`<transition>`)
先记下来: 1、不使用初始化语句; 2、不使用延时语句; 3、不使用循环次数不确定的语句,如:for...
https://pypi.org/project/SpeechRecognition/ pip3 i...
今天来介绍 JavaScript 的模组 esm 系统及 commonjs 系统。 什麽是模组 当我...
Angular 1. 新增专案 ng new [project-name] 范例ng new sys...
Hi Dai Gei Ho~ 我是 Winnie ~ 在今天文章中,我们要来继续延伸 昨天文章的主题...