OC语法10——@protocol协议,
参考资料:博客
@protocol,协议:
OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范。
实现此协议的类里的方法,必须按照此协议里定义的方法规范来。
格式:CO中定义协议用@protocol和@end成对使用:@protocol 协议名 <NSObject> .... @end
另外,OC协议里的方法并不一定要全部实现,@required(必须实现)。@options(可选实现)。若不写这两个关键字,则默认是必须实现的。
实现协议用尖括号。注意:某类实现协议,是在该类的.h文件里的(@interface Student :NSObject <PersonDelegate>)
协议是为了定义方法的规范,注意,只是方法的规范。不能定义成员变量等。
Person.h: 协议PersonDelegate就写在Person的声明文件里,没问题。
@protocol PersonDelegate <NSObject> //任何一个协议都要实现元协议NSObject - void run();
- void sleep(); @end @interface Person : NSObject <PersonDelegate> //Person继承根类NSObject,并实现协议PesonDelegate
@end
Person.m:
#import "Person.h" //Person的声明和PersonDelegate协议都在里面 @implementation Person - void run()
{
NSLog(@"跑!");
} - void sleep()
{
NSLog(@"睡!");
} @end
协议在iOS开发中的应用:
在iOS开发中,对UI按钮的操作通常使用代理模式。
所谓代理,也就是说按钮(Button)被点击后响应动作由”代理“(Listener)帮它完成。(代理作为Button类的一个属性)
那一个类怎么成为Button的代理呢?它又不知道该Button有哪些响应动作。
所以,若要成为某Button的代理,则只需实现一个协议(ButtonDelegate),该协议里定义了Button的响应动作的规范。
(既然你是我的代理,你要帮我实现相应动作,你就要实现这些规范方法。)
温馨提示:如果还不能明白,请参考上面的博客链接。
OC语法10——@protocol协议,的更多相关文章
- IOS开发-OC学习-protocol(协议)
在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法. 例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法:学 ...
- swift开发之--Protocol(协议)
使用object-c语言的同学们肯定对协议都不陌生,但在swift中苹果将protocol这种语法发扬的更加深入和彻底. Swift中的protocol不仅能定义方法还能定义属性,配合extensio ...
- SIP (Session Initiation Protocol) 协议
Session Initiation Protocol 介绍 SIP是VoIP技术最常使用的协议,它是一种应用程序层协议,可与其他应用程序层协议配合使用,以控制Internet上的多媒体通信会话. V ...
- OC中的protocol
一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...
- Objective-C( protocol协议)
protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...
- OC语言BLOCK和协议
OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...
- ISO 基础之 (十三) protocol 协议
一 简绍 protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现.这种模式一般称为代理(delegation)模式.通过Protocol定义各种行为,在不同的场景采 ...
- 关于OC语法的公开和私有的讨论
关于OC语法的公开和私有的讨论 OC语法中,类的.h文件向外面暴露类的功能/方法接口,其中定义的属性/方法/协议/类别/类扩展都属于公开的,但实例变量要看限定词(@protected/@public/ ...
- (转载)OC学习篇之---协议的概念和用法
在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Jav ...
随机推荐
- Tcl 简单介绍及特性
[简单介绍|特性] l 简单介绍 Tcl是一门产生于80年代末的语言,和Python一样,她是用c开发出来的.假设说C/Java/C++/C#为编译型语言的话,那么Python.Perl和Tcl就是 ...
- JqueryUI-1
本文在于巩固基础 学习网址:http://jqueryui.com/ 基本概念:jQuery UI[是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画. ...
- UMeditor 百度编辑器Mini学习
准备开始研究百度的mini编辑器 1.4.3的昨天配置好了 ,也可以用了(.net 3.5) 为此我废了好大的力 研究了一天才弄好 结果今天一来上司就说 这个1.4.3 我们没必要用这么大的 用 ...
- 实现DataGridView和DevExpress.GridControl表头全选功能
1)DevExpress控件的GridView的实现多选操作 先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作.重新绘制表头等操作,首先在加载第一步实现相关的 ...
- 阻止JS事件冒泡传递(cancelBubble 、stopPropagation)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- UIButton 文档翻译(持续更新)
UIButton 文档翻译 继承 UIControl; UIView; UIResponder; NSObject 协议 UIFocusEnvironment,UIAppearanceContaine ...
- mysql的约束的讨论
问题:该不该加约束,比如非空约束,外键约束 学院派会告诉你在设计的时候把应该有的约束都加上 而实践派得出的结论是主键一定加,非空约束尽量加,外键最好依赖于程序逻辑,而不是数据库,从而更好的拥抱变化,快 ...
- mysql 蠕虫复制
INSERT into user_info(version,create_user_count,create_pc_count) select version,create_user_count,cr ...
- #CI的MVC实现
CI的MVC实现 CI被标榜为一款简单易用的框架,经过一段时间的了解后,它的小而精给让我印象深刻.麻雀虽小五脏俱全,一个框架产品包含太多的特性,这篇文章就说说CI中是如何实现MVC的? 执行流程 根据 ...
- Android显示YUV图像
需要流畅显示YUV图像需要使用Opengl库调用GPU资源,网上在这部分的资料很少.实际上Android已经为我们提供了相关的Opengl方法 主体过程如下: 1.建立GLSurfaceView 2. ...