【OC语法】Protocol协议的介绍

OC中的类别Category-协议Protocol-扩展Extension 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中。通常只在类别中定义方法。  类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end #import #import "Buy.h"@interface Person : NSObject 阅读详情

OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的。

协议就是定义了一组方法,然后让其他类去实现


下面来看代码:

WithProtocol.h

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  WithProtocol.h  
  3. //  11_ProtocolDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. @protocol WithProtocol <NSObject>  
  12.   
  13. //默认是必须实现的  
  14.   
  15. //必须实现  
  16. @required  
  17. - (void)finshTask;  
  18. - (void)dontLate;  
  19.   
  20. //可选实现  
  21. @optional  
  22. - (void)wearNeat;  
  23.   
  24. @end  
这里就定义了一个协议WithProtocl

协议的定义格式:

@protocol  协议名  <父协议>

定义方法

@end

注:定义协议的关键字是@protocol,同时协议也是可以继承父协议的


协议中定义的方法还有两个修饰符:

@required:这个表示这个方法是其他类必须实现的,也是默认的值

@optional:这个表示这个方法对于其他类实现是可选的

这个就和类似与Java中的抽象类了,如果是abstract修饰的就必须实现,所以如果一个协议中没有@optional修饰的方法,那么这个协议就相当于Java中的接口了。


这里要注意的是,上面的代码中NSObject不是我们之前说的NSObject类了,而是NSObject协议,他也是OC中第一个协议,这个名字相同在OC中是没有关系的。


再看一下协议的使用:

Student.h

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Student.h  
  3. //  11_ProtocolDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. #import "WithProtocol.h"  
  12.   
  13. @interface Student : NSObject <WithProtocol>  
  14.   
  15. - (void)study;  
  16.   
  17. @end  
使用协议很简单, 直接在继承类(NSObject)后面 <协议名>即可


Student.m

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  Student.m  
  3. //  11_ProtocolDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import "Student.h"  
  10.   
  11. @implementation Student  
  12.   
  13. - (void)study{  
  14.     NSLog(@"study");  
  15. }  
  16.   
  17. //直接在.m文件中实现即可,不需要在.h文件中再次定义  
  18. #pragma mark - WithProtocol  
  19. - (void)finshTask{  
  20.     NSLog(@"完成任务");  
  21. }  
  22. - (void)dontLate{  
  23. //#warning 代码过几天在补充  
  24.     NSLog(@"不迟到");  
  25. }  
  26.   
  27. - (void)wearNeat{  
  28.     NSLog(@"穿戴整洁");  
  29. }  
  30.   
  31. @end  
然后我们在实现类中,去实现协议中必须要实现的方法

注:这里用到了

#pragma mark - WithProtocol

这个作用就是做一下标记,标记后面的方法都是协议中的方法,这样就可以将一个类中的方法类别分的更细,我们在文件导航栏中进行查看:


光标要放到#param那里,上面的文件栏才会出现@implementation Student

然后我们点击@implementation Student


看到了协议中的方法和类本身的方法就被分开了,这样便于浏览


还有一个是

#warning 代码过几天在补充

这个就是标记此处代码有一个警告,Xcode会在此处显示黄色标记,这个作用就是给自己添加一个标记,后续在来查看


比如,我在开发的过程中,此处的代码还是有一些问题的,但是可能临时不能处理,等以后有时间在回过头来修改,就是打个标记。


测试类:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  main.m  
  3. //  11_ProtocolDemo  
  4. //  
  5. //  Created by jiangwei on 14-10-11.  
  6. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. #import "Student.h"  
  12.   
  13. int main(int argc, const charchar * argv[]) {  
  14.     @autoreleasepool {  
  15.         Student *stu = [[Student alloc] init];  
  16.         [stu finshTask];  
  17.         [stu dontLate];  
  18.           
  19.         //判断wearNeat方法有没有在Student中实现了  
  20.         if([stu respondsToSelector:@selector(wearNeat)]){  
  21.             [stu wearNeat];  
  22.         }  
  23.     }  
  24.     return 0;  
  25. }  
这里有一个方法 respondsToSelector:@selector ,这个方法的作用是判断当前对象中是否定义了一个方法,这个方法还是很有用的,如果在Java中,我们可能需要用反射去实现了。

总结

协议在OC中也是一个很重要的概念,Foundation框架中很多地方都用到了协议,其实和Java中的抽象类以及接口非常相像

逆向选择启示录:一个失败高频策略如何意外跑赢市场 本文探讨了高频交易中的逆向选择现象,揭示了一个失败的高频策略如何通过简化意外跑赢市场。通过加密货币市场的实证分析和蒙特卡洛模拟,研究发现低预测性的简单策略反而更具鲁棒性,有效规避了逆向选择风险。文章还提供了小币种做市策略的优化框架和实践建议,为量化交易者提供了宝贵洞见。 阅读详情

相关推荐

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1352

OC_protocol协议介绍(1)

1 protocol的概念  java中有interface接口这个概念,接口就是一堆方法的声明没有方法的实现,而在OC里面,Interface是一个类的头文件的声明,并不是java中接口的意思。但是OC中也有接口这种用法,是由一个叫做协议的Potocol来实现的。 java中接口声明的方法,如果一个类实现了这个接口,就必须实现这个接口的所有方法。而OC可以在protocol中声明一些选择实现

jiangminyan的博客 614

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

OC协议protocol详解

1、protocol协议的基本用途: (1)可以用来声明一大堆方法(不能声明成员变量) (2)只要某个类遵守了这个协议,就相当于拥有了这个协议中的所有方法声明。 (3)只要父类遵守了某个协议,就相当于子类也遵守了。 注意:协议内仅仅写方法声明,不能写实现,不能写成员变量 2、对协议的简单理解: (1)protocol声明的方法可以交给任何类去实现。 (2)protocol的作用仅...

iteye_18817的博客 549

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2278

树上柑橘检测实战:自制数据集与YOLO训练全流程复盘

目标检测模型的性能上限往往由训练数据决定,尤其在农业视觉这样的复杂场景中,公开数据集与真实环境的差异常导致模型漏检、误检频发。高质量的标注数据是模型泛化的基础,从采集、清洗到统一标注规范,每一步都直接影响最终效果。对于检测任务而言,VOC与YOLO两种主流标注格式的转换是工程落地的常见环节,理解坐标归一化原理并做好校验,能有效避免训练事故。在模型训练阶段,合理划分数据集、谨慎选择数据增强策略,并结合切片推理解决小目标漏检,是果园场景下提升精度的关键。这套基于2511张果树图像的单类别检测流程,不仅支撑了柑橘

weixin_29057163的博客 231

OC之Protocol (协议)

(一)简介 1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。 2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。 3.只要父类遵守了某个协议,那么子类也遵守。 4.Protocol声明的方法可以让任何类去实现

紫金飞侠雷的专栏 809

ABAP 里的 XML 与 JSON 处理,一套从接口落地到 Clean Core 的完整参考

ABAP 里的 XML 和 JSON 处理并不只是几段工具类调用。iXML、sXML、、XCO、、code page conversion、GZIP、对象序列化,这些能力背后对应的是不同的数据规模、访问模式、接口契约和运行时边界。小报文、复杂树结构、需要修改节点,iXML 很顺手。大报文、顺序读写、内存敏感,sXML 更可靠。ABAP 结构和 XML、JSON 之间要做标准转换,是主干。现代 JSON API、ABAP Cloud、命名转换,XCO 值得优先考虑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

OC语言之Protocol基本使用

# Protocol基本概念 ##1.protocol 基本概念 - Protocol翻译过来, 叫做”协议”     +在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中接口是由一个叫做协议的protocol来实现的     +protocol它可以声明一些必

u012938194的专栏 8750

Python 爬虫实战:爬取评论数据做情感分析

摘要:本文介绍基于Python的京东商品评论爬取与情感分析全流程实现。通过Requests库抓取评论数据接口,结合JSON解析获取结构化评论信息。利用SnowNLP进行中文文本情感分析,量化用户评价的情感倾向(正面/负面/中性)。结果显示正面评论占比66.3%,负面评论13.3%,关键词分析发现"卡顿""发热"是主要负面因素。该方法可应用于产品优化、品牌管理等场景,为决策提供数据支持。

2503_91057718的博客 1709

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 988

黑马程序员——OC语言——protocol(协议)的概念及其使用

--

yanglipeng1993的博客 605

【Unity】【WebRTC】如何用Unity而不是浏览器接收远程画面

之前几篇我们讨论了如何设置信令服务器,如何发送画面给远端以及如何用浏览器查看同步画面,今天来讨论如何实现Unity内部接收画面。看本篇之前请先看过之前将web服务器设置和基本远程画面功能的几篇博文。在Unity编辑器中打开一个示例项目,点击BroadCast按钮。4. 再点击Receiver按钮,Start。Build一个示例项目,并运行这个项目。启动Web.app。

每日出拳老爷子的博客 1721

OC_语法

OC_语法

qq_25714833的专栏 185

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OC语法总结

1> 凡是从NSObject中继承的类都需要自己管理内存,在OC语法中,创建的任何一个对象都拥有一个引用计数器,第一次创建的时候这个引用计数器为1,当引用计数器的值为0时,该对象会被销毁。在xcode4.5以后版本的编译器环境中,会自动在.m文件中生成该属性getter和setter方法的标准实现,不需显示声明用@synthesize来生成属性的getter和setter方法实现。* 3. 如果即没有实现get方法,也没有实现set方法,则@synthesize会自动生成属性的get和set方法实现。

2501_90210016的博客 1002

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OC学习7——@class、Category分类、protocol协议

@引人类两种方法区别: 1.引人.h方式:#import “Book.h" 包进去被引用类的所有信息,能得到Book包含的方法; 2.@class方式:@class Book 仅是类的声明,究竟有哪些方法等信息并不知道;  @使用: 1.如果上百个头文件都#import同一个文件,如果被引入的稍有改动,这些文件也得重新编译 2.对于相对包含的问题则不能用#import “A.h”

Ably_Clove 1263

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OC 基础:基本语法

OC 基础:基本语法

a690197843的博客 1166

OC之Protocol(协议)

一、简介 1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。 2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。 3.只要父类遵守了某个协议,那么子类也遵守。 4.Protocol声明的方法可以让任何类去实现,pr

VicenteZ 540

OC语法<3.3> OC中特有的语法:Protocol协议

Protocol协议:  1:协议其实很简单,协议就是规定,谁遵循了我的协议,谁就能够指向我,比如说,小明实现了好人协议,那么小明就是一个好人  2:协议本身只是提供方法的声明,并不实现方法,谁遵循了协议,谁就要实现协议中定义的方法(跟java中的抽象方法有点类似,都是一些共有的属性),说白了协议里面就是一堆方法的声明,等着类引用去实现  3:一个类可以同时遵循多个协议  4:协议本身也可

克丽丝—>小菲儿的专栏 628

黑马程序员——OC语法 block和protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、block 1.block简介 block是一种数据类型。 block类型的数据封装了一段代码,可以在任何时候执行。(和函数相似) block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。 block跟函数很像:      1>可以

jerome3的专栏 646

黑马程序员——OC语法,封装block和协议protocol

—-Java培训、Android培训、iOS培训、.Net培训、期待与您交流!—-一、block1.block基本认识<1>.block是一种数据类型。 <2>.block类型的数据封装了一段代码,可以在任何时候执行。 <3>.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。 <4>.block的作用:封装一段代码,以便随时调用,简称代码块 <5>.block

pangetzp_41904129的专栏 565

[OC]-<协议 “(protocol)“ 与委托(delegate)>

文章目录协议规范、协议And接口这样理解协议使用类别实现非正式协议非正式协议实例关于这个代码正式协议的定义正式协议@protocol语法语法说明正式协议实例正式协议特点实现协议实现协议的语法实现类使用协议来定义变量协议定义变量实例关于正式协议与非正式协议委托和协议 协议 协议是OC的知识点之一,其作用类似于接口,用于定义多个类应该组瘦的规范 规范、协议And接口 OC语言中的协议的作用就相当于其他语言的接口作用 同一个类的内部状态数据,各种方法的实现细节完全相同,类是一种具体的实现体,而协议

weixin_61639290的博客 766

OC Protocol(待续)

Protocol 协议声明任何类都可以选择实现的编程接口。协议使得两个通过继承而远近相关的类可以相互通信以实现某个目标。因此,它们提供了一种替代子类化的方法。任何可以提供对其他类有用的行为的类都可以声明一个编程接口,以匿名方式提供该行为。任何其他类都可以选择采用协议并实现其一个或多个方法,从而利用该行为。如果协议采纳者实现了协议中的方法,则声明协议的类将调用这些方法。 其实OC中的Protocol跟Java中的Interface是非常相似的。 Formal and Informal Protocols 有

Alamo Fire 375

OC特有语法—Protocol

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

l841017122的博客 491

OC中protocol协议

protocol协议: 第一部分: 1.基本用途 1> 可以用来声明一大堆方法(不能声明成员变量). 2> 只要某个类遵守类这个协议,就相当于拥有这个协议中的所有方法声明. 3> 只要父类遵守类某个协议,就相当于子类也遵守类. 2.格式 1> 协议的编写 @protocol 协议名称 // 方法声明列表 @end 2> 某个类遵守协议 @interface 类名:父

u013400555的博客 225

17、OC 协议(protocol)

协议的作用与Java中接口的作用非常类似,用于定义类应该遵守的规范,协议不提供实现,只定义规范。协议中定义多个类的公共行为规范,协议通常定义一组公用方法,方法的实现交给类去完成。 协议的基本语法格式如下: @protocol 协议名 父协议1,父协议2...> //协议方法 @end 协议支持多继承,可以看到上面的语法格式,多个父协议放在 协议的方法需要类去实现,如果类没有

逆袭的青年的专栏 3129
上一篇: 【OC语法】Categeory(类目)的介绍
下一篇: 【OC语法】代理模式的介绍(运用到多态、id类型作为方法的参数的知识点)
iOS_houyimin
博客等级 码龄11年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值