参考资料:博客

@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协议,的更多相关文章

  1. IOS开发-OC学习-protocol(协议)

    在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法. 例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法:学 ...

  2. swift开发之--Protocol(协议)

    使用object-c语言的同学们肯定对协议都不陌生,但在swift中苹果将protocol这种语法发扬的更加深入和彻底. Swift中的protocol不仅能定义方法还能定义属性,配合extensio ...

  3. SIP (Session Initiation Protocol) 协议

    Session Initiation Protocol 介绍 SIP是VoIP技术最常使用的协议,它是一种应用程序层协议,可与其他应用程序层协议配合使用,以控制Internet上的多媒体通信会话. V ...

  4. OC中的protocol

    一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...

  5. Objective-C( protocol协议)

    protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...

  6. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

  7. ISO 基础之 (十三) protocol 协议

    一 简绍 protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现.这种模式一般称为代理(delegation)模式.通过Protocol定义各种行为,在不同的场景采 ...

  8. 关于OC语法的公开和私有的讨论

    关于OC语法的公开和私有的讨论 OC语法中,类的.h文件向外面暴露类的功能/方法接口,其中定义的属性/方法/协议/类别/类扩展都属于公开的,但实例变量要看限定词(@protected/@public/ ...

  9. (转载)OC学习篇之---协议的概念和用法

    在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Jav ...

随机推荐

  1. ChartConlrol二维图表类型

    WinForms Controls >Controls > Chart Control > Concepts > Creating Charts > 2D Chart T ...

  2. 前端开发必备的Sublime 3插件

    Sublime的大名已经无需我介绍了,首先先介绍如何启用插件安装功能: 打开Sublime 3,然后按 ctrl+` 或者在View → Show Console 在打开的窗口里黏贴这个网站上的代码( ...

  3. 什么是HTTP Keep-Alive呢?

    在通过调试工具查看网络请求的时候,通常在response header能看到类似下面这种:Keep-Alive: timeout=10, max=94 .那么Keep-Alive到底是什么呢? HTT ...

  4. Import MySQL Dumpfile, SQL Datafile Into My Database

    How can I import a MySQL dumpfile into my database? I'm using CentOS Linux 5 server. My old hosting ...

  5. windows 安装paramiko模块

    首先需要安装pycrypto这个模块,这个下源码编译安装的不能用报错warning: GMP or MPIR library not found; Not building这个用编译好的模块安装已编译 ...

  6. ZRender源码分析4:Painter(View层)-中

    回顾 上一篇说到:ZRender源码分析3:Painter(View层)-上,接上篇,开始Shape对象 总体理解 先回到上次的Painter的render方法 /** * 首次绘图,创建各种dom和 ...

  7. JavaScript总结之鼠标划过弹出div单击出现对话框

    为了满足他们的永无止境的要求,我可谓是任劳任怨啊,累断了双手,看瞎了双眼.这个是来写鼠标划过一个按钮,然后弹出一个小提示框解释,另外根据radio是否选中,判断点击后如何执行,然后执行之后再有一个确认 ...

  8. Binder连接池

    一.为什么需要Binder线程池 产生原因:因为当有多个不同的业务块都要使用AIDL来进行通信,则需要创建多个Service,每创建一个Service就需要消耗系统资源. 解决思路:将所有的AIDL放 ...

  9. Python中字符串切片操作

    一:取字符串中第几个字符 print "Hello"[0] 表示输出字符串中第一个字符print "Hello"[-1] 表示输出字符串中最后一个字符   二: ...

  10. NET Core 介绍

    NET Core 介绍 标签: ASP.NETCore 1. 前言 2. ASP.NET Core 简介 2.1 什么是ASP.NET Core 2.2 ASP.NET Core的特点 2.3 ASP ...