黑马程序员——有关protocol的小结
在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的小结的更多相关文章
- 黑马程序员——有关protocol代理模式的举例说明
学习了protocol协议的基本原理和使用方法之后 ,下面就看一下在程序中是怎么体现这种代理思想的. 假定有个人jack需要找一个厨师为自己做饭,当他想要吃饭的时候就可以让厨师给他做好饭.这一需求如何 ...
- 黑马程序员——【Java高新技术】——代理
---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
- 黑马程序员+Winform基础(上)
黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...
- 黑马程序员—C语言的函数、数组、字符串
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
- 黑马程序员:Java基础总结----泛型(高级)
黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...
- 黑马程序员:Java基础总结----类加载器
黑马程序员:Java基础总结 类加载器 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
- 黑马程序员:Java基础总结----枚举
黑马程序员:Java基础总结 枚举 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...
随机推荐
- linux dsp 播放音频文件
#include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioc ...
- ThinkPad L421 如何禁用触摸板
控制面板 - 硬件和声音 - 鼠标 . 选中如下图所示的 UltraNav 选项卡. 将 启用 TouchPad 前的 √ 去掉即可. 如果没有 UltraNav 这一选项卡,可至联想官网下载相关驱动 ...
- [原]poj-2488-water-DFS
题目大意: 输入一个p*q的棋盘, 行用数字表示, 列用大写字母表示 , 1 <= p*q <= 26, 输出能够把棋盘全部空格走完且每个空格只走一次的字典序最小的路径.不存在则输出“im ...
- Intent Flag介绍 intent.addFlags()
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个标志一般不是由程序代码设置的 ...
- Web Forms vs Web MVC
MVC相对于WebForm来说更难学习,但性能优于WebForm,比较适合大型项目,开发成本较高,但耦合度低,易于维护,没有太多的现成控件,开发效率较低.对WebForm有基础的人反而不太容易学MVC ...
- [Warning] TIMESTAMP with implicit DEFAULT value is deprecated
As indicated by the warning, to turn off the nonstandard behaviors, enable the new explicit_defaults ...
- iPad中控制器view的width和height
一.iPad中控制器view的width和height 1> 规律 * width 是宽高中最小的那个值 * height 是宽高中最大的那个值 2> 举例(比如窗口根控制器的view,有 ...
- Annotation(jdk5.0注解)复习(转自http://3w_cnblogs_com/pepcod/)
package annotation.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retent ...
- Sqoop的使用(Mysql To HBase)
最近需要将mysql的数据整合到HBase中,原本使用MapReduce,自己制作job将mysql的数据导入, 查阅资料过程中,发现了开源工具sqoop(关系性数据库与HDFS,HBASE,HIVE ...
- Heritrix源码分析(八) Heritrix8个处理器(Processor)介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/643367 本博客已迁移到本人独立博客: http://www.yun5u ...