OC协议和id
来源:互联网 发布:ec软件使用 编辑:程序博客网 时间:2024/06/07 20:13
协议
两个事物之间达成某些约定,协议规定了遵守协议的事物
【协议作用】
协议就是来规范接口
代码中的协议【只有OC有】
OC @protocal
其他语言类似的协议(只是类似)
JAVA 接口
C++ 抽象类
OC协议
规定了遵从协议的类,需要实现的方法
这个类遵守协议之后,这个类的实例对象也就遵守了协议
类似通过尖括号遵从协议,就必须实现要求的方法
【协议目的】实现通信
自定义IOSCode协议
自定义的协议,都要遵守NSObject协议
【一旦导入了协议的头文件,就代表当前类遵守协议】
import “IOSCode.h”@protocal IOSCode <NSObject>声明方法-(void)writeIOSCode;@required//必须要实现的【遵守协议的类必须要实现这个方法】【此属性可不写】-(void) reading;@optional//可选的【遵守协议的类可以实现这个方法,也可以不实现】-(void)eat;@end
NSObject基协议
协议的内容就是方法【协议直接写在.h文件中】
协议中不能写成员变量
协议中可以写多个方法
一旦遵守IOSCode协议,那么遵守协议的类必须要实现这个方法
协议中的方法,在类的.h文件中可以不声明
一旦遵守协议,那么协议中的方法必须要实现
【协议作用】规范方法/接口
类遵守了协议,那么这个类的实例对象也就遵守了
多了一个指针指向对象,计数器要➕1
id <IOSCode> staff = [xiaohuang retain];
staff : xiaohuang角色的转变
id【泛型指针】
staff还是一个泛型对象指针,这个指针遵守IOSCode协议
staff指针指向的对象也必须要遵守IOSCode协议,否则会报警
staff指针只能调用协议中的方法,否则会报警【看对象不看指针,所以仍然会执行对象的方法】—>ARC环境下直接报错
[staff writeIOSCode];
指针必须要指向遵守协议的类的对象
检测staff指向的对象是否遵守IOSCode协议
objective-c的和C++里的(void*)类似
PS:Objective-C和Java一样,都有运行时环境,有内省的能力。Objective-C和java有很多不同的地方,在iOS系统里,Objective-C的内存需要自己管理,添加了ARC机制后编译器帮助了Objective-C 添加release释放的代码。而Java是通过垃圾回收器管理内存的。
if([staff conformsToProtocal:@protocal(IOSCode)]){ 执行方法}
通过选择器检测判断类中可选方法定义是否存在【方法在协议中是可选方法,但是没有定义】
if([staff respondsToSelector:@selector(drink)]){执行方法}
派生时调用不同方法
for (id obj in arrar){//会把同一个消息给不同的对象//这些消息都会被相应,如果消息存在,那么没问题//但是如果该消息不存在,程序就会爆炸//【Want】不同的对象想要相应不同的消息//【idea】判断该对象是哪一个类的对象[obj eat];//if ([obj isKindOfClass:[Qu class]])-->这样写也可以if (YES==[obj isKindOfClass:[Qu class]]) { [obj haha];}else if (YES==[obj isKindOfClass:[Bug class]]){ [obj beatOthers];} }
遵守NSObject协议,普通类继承于NSObject类,就拥有了NSObject中的所有方法,遵守NSObject协议
【结论】:普通类不需要遵守NSObject协议中的方法
- OC协议和id
- OC分类和协议
- OC 协议和委托
- OC语言id和instancetype
- OC语言BLOCK和协议
- OC语言Block和协议
- OC中的分类和协议
- OC的分类和协议
- OC语言BLOCK和协议
- OC语言BLOCK和协议
- OC语言BLOCK和协议
- OC语言BLOCK和协议
- OC中委托和协议
- OC语言BLOCK和协议
- OC的正式协议和非正式协议
- OC正式协议和非正式协议
- OC正式协议和非正式协议
- OC中的instancetype和id区别
- javascript中的return 详解
- opencv3学习之图像的翻转--重映射
- Android 应用通过init.rc启动service去执行具有root权限sh脚本
- 1.4变量与数组.md
- dubbo的优点
- OC协议和id
- linux文件系统分类和特点
- zabbix内容整理
- 1.5运算符.md
- 微服务时代---Dubbo(一)
- Jobdu1102 畅通工程(并查集)
- 我要高效学习
- 路径
- HDU6150 Vertex Cover