在OC程序中经常会有这样的问题就是一个类想让其他类帮自己实现某些方法,然后再将结果返回给这个类;如何让一个类要找的代理去实现自己想要的方法呢?

这样就需要有一个协议,让能遵守协议的其他类都能实现协议中的方法声明,成为该类的代理。

protocol的使用原则:

1.可以用来声明很多方法,但是不能声明成员变量。

2.只要一个类遵守了这个协议,就相当于拥有了这个协议中所有的方法声明,然后在自己的.m文件中实现就行了。

3.只要父类遵守了这个协议,就相当于子类也遵守了这个协议。

protocol的使用方法:

一、协议的定义

@protocol  协议名<NSObject>

//方法声明

@end

二、如何遵守协议

1.类遵守协议

@interface  类名:父类名<协议1,协议2,……>

@end

2.协议遵守协议

@protocol 协议名 <协议1,协议2,……>

@end

三、协议中方法声明的关键字

1.@required(默认),这个是默认要求去实现的,不实现会有警告。

2.@optional这个是可以先实现也可以选择不实现。

一般情况下这两个关键字是用于程序员之间的交流,声明哪些方法可以不实现哪些方法要去实现。

四、在定义一个变量时,可以限制这个变量保存的对象遵守某个协议

类名<协议名>*变量名;       如Person<protocol1>*p=[[Person alloc]init];   要求p保存的对象Person必须遵守protocol1协议。

id<协议名>变量名;            如id<protocol1>obj;

五、@property中声明的属性也可以做一个遵守协议的限制。

@property (nonatomic ,strong) 类名<协议名>变量名;         如@property (nonatomic,strong) Person<protocol1>*p1;

六、协议不仅可以定义在单独的.h文件中也可以定义在一个类的声明中。

即若协议内容公用就要定义在单独的.h文件中方便使用。

七、协议的提前声明

和类的提前声明“@class 类名”的方式类似,协议的提前声明可以用“@protocol 协议名”的方式进行提前声明,些声明只是纯粹性的声明,若需要协议中的方法还需要用

#import "协议头文件"方式获取其中的方法声明。

如:@protocol Myprotocol;          #import "Myprotocol.h"

关于protocol 理论知道我只学了这么多,日后的学习中再进行补充吧。

http://www.itheima.com/

黑马程序员——有关protocol的小结的更多相关文章

  1. 黑马程序员——有关protocol代理模式的举例说明

    学习了protocol协议的基本原理和使用方法之后 ,下面就看一下在程序中是怎么体现这种代理思想的. 假定有个人jack需要找一个厨师为自己做饭,当他想要吃饭的时候就可以让厨师给他做好饭.这一需求如何 ...

  2. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  3. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  4. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  5. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  6. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  7. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  8. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  9. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

随机推荐

  1. css 射线实现方法

    一个斜的四边形 .top_ad_out::before { content: ''; position: absolute; z-index: -1; width: 336px; height: 25 ...

  2. Maven POM.xml详解[转]

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. 51nod 1049 1049 最大子段和 (dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 令 dp[i]表示为以a[i]结尾的最大子段和,则  dp[i]= ...

  4. Hook入门

    Hook入门 2014-07-24 基本概念 Windows消息机制 Hook(钩子) 运行机制 核心函数 C# hook示例 基本概念[1] Windows消息机制[5] Windows操作系统是建 ...

  5. LBS由ip查经纬度

    LBS API: https://api.map.baidu.com/highacciploc/v1?qcip=223.104.5.201&qterm=pc&ak=NLwCqrDce4 ...

  6. 推荐开源Api文档生成工具——Doxygen

    http://www.stack.nl/~dimitri/doxygen/index.html 非常的方便. 2步生成API文档. 具体信息见官网哟!

  7. Android 用户界面---拖放(Drag and Drop)(二)

      拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事 ...

  8. HTML网页插入图像

    一.WEB上支持的图片格式: GIF:能保存256中颜色,支持透明色,支持动画效果 JPEG:不支持透明色和动画,颜色可达1670种 PNG:支持透明色,不支持动画,颜色有几种到1670种 二.将图片 ...

  9. Qt之重启应用程序

    简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...

  10. sass 常用函数的整理

    @charset "utf-8"; @import "compass/css3/inline-block"; @import "compass/css ...