Protocol入门
参考:http://haoxiang.org/2011/08/ios-delegate-and-protocol/
介绍:
Protocol在iOS中就是协议,简单的理解就是一组函数的集合,这个集合中有分为必需实现的和可选实现的。一般来说,protocol会与delegate模式一同使用。说白了,一个protocol就是一组实现规范。
定义:
@protocol testProtocol // 协议名称
@required // 必需实现的方法
-(void)getTheResult;
@optional // 可选实现的方法
-(void)running;
@end
使用:
@interface GameProtocol : NSObject
@property id<testProtocol> delegate; // 代理设置
-(void)runTheGame;
@end @implementation GameProtocol
-(instancetype)init{ self = [super init]; [self addObserver:self forKeyPath:@"delegate" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld context:@""]; return self; } -(void)dealloc{ if (self) { [self removeObserver:self forKeyPath:@"delegate"]; //要移除KVO,否则会出错 } } -(void)runTheGame{ [self.delegate getTheResult]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([keyPath isEqualToString:@"delegate"]) { [self runTheGame]; } } @end
结合委托模式:
@interface ProtocolViewController ()<testProtocol> @end @implementation ProtocolViewController
#param mark - testProtocol协议
-(void)getTheResult{
NSLog(@"%@",@"get the result");
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
GameProtocol *game = [[GameProtocol alloc]init];
game.delegate = self;
[game runTheGame];
}
输出结果:
-- ::58.195 testDemo[:] get the result
-- ::58.196 testDemo[:] get the result
总结:
协议就是一组规范,是对一组方法的封装,其他对象调用的时候,只需设置这个代理,然后在该对象中直接调用,这样的话这个对象就能很好的封装,具体的协议实现在调用这个对象的时候再具体实现,这样就能够做到逻辑的封装,与业务逻辑无关。
Protocol入门的更多相关文章
- google protocol 入门 demo
ubunbu系统下google protobuf的安装 说明: 使用protobuf时需要安装两部分: 第一部分为*.proto文件的编译器,它负责把定义的*.proto文件生成对应的c++类的.h和 ...
- Google Protocol Buffers 快速入门(带生成C#源码的方法)
Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...
- C#/net 使用Protocol Buffers入门
Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于 ...
- Java使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XM ...
- Google Protocol Buffers 入门
Google Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的 ...
- Google Protocol Buffer入门
简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...
- internet协议入门
前言 劳于读书,逸于作文. 原文地址:internet协议入门 博主博客地址:Damonare的个人博客 博主之前写过一篇博客:网络协议分析,在这篇博客里通过抓包,具体的分析了不同网络协议的传送的数据 ...
- dicom网络通讯入门(1)
看标准 越看越糊,根本原因:dicom抽象得非常严重,是“专家”弄的.没办法. 又是什么服务类 又是什么sop,相信你把dicom标准看到头大 都不知如何下手. 不就是 socket么 这有何难. 首 ...
- OpenStack从入门到放弃
OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...
随机推荐
- Jmeter非GUI模式启动
首先我们需要了解,GUI和非GUI模式启动Jmeter对测试的影响:Jmeter可视化界面及监听器展示结果需要消耗负载资源,从而导致,在大并发的情况下GUI方式会导致负载机资源紧张,对性能造成影响 e ...
- Rails-Treasure chest1 (自定义Model网址;多语言包; 时区设置, TimeZone类; 格式日期时间; 表单单选UI; 表单多选UI;Select2 Plugin)
自定义Model网址: 随机值网址SecureRandom.base58 多语言包, 包括默认语言设置和user自设置. 时区设置, TimeZone类 ,增加user自选时区功能 格式日期时间: x ...
- mybatis的xml配置中if text判断不为0
问题:money_search_end != ‘0’为0时依然继续执行 解决方案: 1.单个字符要用''.toString() 2.用双引号“”,当然text的引号要改为单引号‘’ <if te ...
- hdu4965矩阵快速幂
这题不能直接按常规做啊,因为数组根本就开不下,转换思维A(B*A)^(n*n-1)B 这样的话数组B*A就是10*10了,然后快速幂就行了 刚开始数组都开小了,tle,还找了半天bug...还有就是定 ...
- 动态创建OATipBean
动态创建OATipBean. 动态创建的OATipBean无法直接设置提示内容,需要添加一个静态文本. 参考User Guide示例如下. If you need to create a tip pr ...
- HDU 1495 非常可乐 bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...
- C++设计模式之享元模式
概述 想想我们编辑文档用的wps,文档里文字很多都是重复的,我们不可能为每一个出现的汉字都创建独立的空间,这样代价太大,最好的办法就是共享其中相同的部分,使得需要创建的对象降到最小,这个就是享元模式的 ...
- <NET CLR via c# 第4版>笔记 第5章 基元类型、引用类型和值类型
5.1 编程语言的基元类型 c#不管在什么操作系统上运行,int始终映射到System.Int32; long始终映射到System.Int64 可以通过checked/unchecked操作符/语句 ...
- SSRS 在订阅的时候,在头值中找到无效的字符。将不重新发送邮件
在头值中找到无效的字符.将不重新发送邮件 SSRS 在订阅的时候,在头值中找到无效的字符.将不重新发送邮件! 查看了一下,只要是发送文件类型的都不可以,改成HTML的就可以.然后重新把RS的报表文件友 ...
- Java 复制一个文件到另外一个目录下
因为项目部署在jboss上面,在上传一些图片的时候,把他上传到当前项目的下,比如:(这里是以Windows服务器为例的,当然linux也是一样的) D:\jboss-eap-6.4\domain\se ...