Object-c 协议@protocol(@required、@optional)
1.协议声明了可以被任何类实现的方法
2.协议不是类,它是定义了一个其他对象可以实现的接口
3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
5:委托,就是调用自己定义方法,别的类来实现。
另外:
可以用来声明一大堆方法(不能声明成员变量)
只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
只要父类遵守了某个协议,就相当于子类也遵守了
@protocol 协议名称 // 方法声明列表 @end
某个类遵守某个协议
@interface 类名 : 父类 <协议名称> @end
@protocol 协议名称 <其他协议名称1, 其他协议名称2>@end
定义变量时,限制这个变量保存的对象遵守某个协议
类名<协议名称> *变量名;id<协议名称> 变量名; NSObject<MyProtocol> *obj; id<MyProtocol> obj2;
@property中声明的属性也可用做一个遵守协议的限制
@property (nonatomic, strong) 类名<协议名称> *属性名; @property (nonatomic, strong) id<协议名称> 属性名; @property (nonatomic, strong) Dog<MyProtocol> *dog; @property (nonatomic, strong) id<MyProtocol> dog2;
三、协议里的关键字
@required - (void)test; - (void)test2;
@optional:这个方法不一定要实现
@optional - (void)test3;
四、基协议
NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
NSObject协议中声明很多最基本的方法,比如description、retain、release等
建议每个新的协议都要遵守NSObject协议
协议可用定义在单独.h文件中,也可用定义在某个类中
1> 如果这个协议只用在某个类中,应该把协议定义在该类中
2> 如果这个协议用在很多类中,就应该定义在单独文件中
分类可用定义在单独.h和.m文件中,也可用定义在原来类中
一般情况下,都是定义在单独文件
定义在原来类中的分类,只要求能看懂语法
转载于:https://www.cnblogs.com/kingBook/p/6703959.html
Object-c 协议@protocol(@required、@optional)相关推荐
- 协议(Protocol)与委托代理(Delegate)
协议(Protocol)的作用: 1. 规范接口,用来定义一套公用的接口: 2. 约束或筛选对象. 代理(Delegate): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...
- Objective-C 入门(七)协议 protocol(JAVA中的接口)
Objective-C 入门(七)协议 protocol(JAVA中的接口) 接口的作用想必大家都比较了解 OV中的 protocol 相比接口作用相似 语法稍有不同 1.先来看声明一个协议 在创建文 ...
- iOS进阶之协议Protocol(13)
协议Protocol 协议Protocol 转载:https://www.jianshu.com/p/5178630d0fd1
- Expected required, optional, or repeated.错误解决方法
Expected "required", "optional", or "repeated".错误解决方法 编译Protobuf 库,出现如 ...
- Objective-C(八、正式协议Protocol,非正式协议informal protocol)——iOS开发基础
结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 八.正式协议和非正式 ...
- Swift 协议protocol
/* 定义协议时候,协议后面最好跟上class delegate的属性最好用weak,用于防止循环引用 */ protocol BuyTicketDelegate : class{ func buyT ...
- Netty序列化协议Protocol buff
序列化协议 序列化和反序列化 把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化.用途:文件的copy.网络数据的传输 Protocol buff(代替JSON) ...
- swift:使用协议protocol设置颜色,UIImage的切圆角ImageWithCornerRadius
//使用协议 方便以后切换颜色配置文件.或者做主题配色之类乱七八糟产品经理最爱的功能 protocol V2EXColorProtocol{ var v2_backgroundColor: UICol ...
- Swift之深入解析协议Protocol的底层原理
一.Swift 协议 ① 概念 协议规定了用来实现某一特定功能所必需的方法和属性. 任意能够满足协议要求的类型被称为遵循(conform)这个协议. 类,结构体或枚举类型都可以遵循协议,并提供具体实现 ...
- 【Swift学习笔记00】——enumeration枚举类型遵循协议protocol
Apple官方文档:The Swift Programming Language Protocols and Extensions一节的小节练习,要求自行定义一个enumeration枚举类型,并且遵 ...
最新文章
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...
- Dataset之Pascal:Pascal竞赛及其Pascal VOC(VOC 2012、VOC 2007) 数据集的简介、下载、使用方法详细攻略
- Java中使用UUID给图片命名的文件上传方法
- 一步一步自定义spinner
- java spark环境配置文件_JAVA, SCALA, HADOOP, SPARK里的JAVA_HOME和环境变量设置
- 关于castle和Could not find the dialect in the configuration错误
- oracle jinitiator 1.1.8.2,oracle jinitiator 1.1.8.2-Oracle Jinitiator1.1.8.27 3264位最新版下载_东坡手机下载...
- 个人收藏的flex特效网址【经典中的极品】
- CRC_8循环冗余校验码verilog实现
- 360 无法显示网速
- (一)基于Multisim的超外差接收系统:本地振荡器的设计
- 网吧无盘用华为服务器,50台主机网吧无盘服务器
- 英维克,上市只是一个新的起点
- typora字体设置颜色的解决方案
- JavaScript中的经典题型(类数组、CSS Sprites、事件委托、经典去重、原型链、闭包、深浅克隆、附带思路流程和源码)
- 服务器开机显示器没反应,老司机教你开机显示器没反应怎么办
- 68个经典励志小故事,让你终身受益[转]
- html 图片自动滚动播放,javascript+html5实现仿flash滚动播放图片的方法
- window 安装 deepin双系统 (thinkpad install deepin)
- CSS样式表引入的三种方式,及优先级顺序