iOS 委托和协议区别和联系
iOS上的协议类似于C#、Java上面的接口,他是从类中抽出来的一系列方法,但方法的实现是在实现这个协议的类中,任何实现这个协议的类都需要实现协议类中的@require方法;
委托是一种设计模式,是一种设计思想。
但是在iOS上面委托经常依托协议来实现(但并不是必须的)。一个很好的例子就是老板和秘书:老板要经营企业需要对新员工培训、对公司管理、打电话、发薪水等工作,但是对应老板来说一些事情例如打电话、发薪水的工作可以通过秘书来做,老板自己只负责对员工培训、公司管理,别的事情委托给秘书来做。委托思想就是在这种类似情况下产生的。
再说一下为什么iOS上面的委托经常依赖协议来实现?就像老板需要一个会打电话、发薪水的秘书来减轻老板自己的工作,但是老板并不知道谁有这两项技能,那老板就会发一个招聘,招聘会这两项技能的人。但老板怎样知道应聘人员会这两项技能那,老板会通过你的学历和工作经验判断应聘人员是否会这两项技能;但是对于程序来说,在不知道这个类的内部情况下怎样知道这个类是不是可以委托,评判标准是啥?这个时候如果一个类实现一个有这两项技能的协议,则能很容易判断出这个类具有这两项技能。这个就是iOS上面为什么委托经常和协议一块用。
协议
#import <Foundation/Foundation.h> //协议是从类抽出的一些方法,如何实现这个协议的类都需要实现这里面的方法
@protocol SecProtocol <NSObject> @required
//发工资
- (void)payoff;
//打电话
- (void)tel; @optional @end
Boss
#import <Foundation/Foundation.h>
#import "SecProtocol.h" //委托人
@interface Boss : NSObject @property (nonatomic, retain) id<SecProtocol> delegate; //管理
- (void)manage;
//教导新员工
- (void)teach;
//打电话
- (void)tel;
//发工资
- (void)payoff;
@end
#import "Boss.h"
@implementation Boss
@synthesize delegate;
- (id)init{
self = [super init];
if (self) {
}
return self;
}
- (void)manage{
NSLog(@"boss manage");
}
- (void)teach{
NSLog(@"boss teach");
}
- (void)payoff{
[self.delegate payoff];
}
- (void)tel{
[self.delegate tel];
}
@end
Sec
#import <Foundation/Foundation.h>
#import "SecProtocol.h"
// 秘书类,实现协议, 委托对象
@interface Sec : NSObject<SecProtocol> @end
#import "Sec.h"
@implementation Sec
- (id)init{
self = [super init];
if (self) {
}
return self;
}
- (void)payoff{
NSLog(@"sec payoff!");
}
- (void)tel{
NSLog(@"sec tel");
}
@end
调用方法
Boss *boss = [[Boss alloc] init];//委托人
Sec *sec = [[Sec alloc] init];//委托对象,实现了一定协议的对象
boss.delegate = sec;//将委托对象复制给委托人里面的委托对象 [boss teach];
[boss manage]; [boss tel];
[boss payoff];
转自:http://my.oschina.net/simple2012/blog/151035
iOS 委托和协议区别和联系的更多相关文章
- 详解Objective-C中委托和协议
Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD: ...
- IOS跟ANDROID的区别
大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...
- CoAP、MQTT、RESTful协议区别
/********************************************************************** * CoAP.MQTT.RESTful协议区别 * 说明 ...
- Web(click and script) 与 Web(HTTP/HTML)协议区别
Web(click and script) 与 Web(HTTP/HTML)协议区别 webjavascriptvbscript浏览器脚本login 先从最简单的说明上来看, Web(HTTP/HTM ...
- IOS基于XMPP协议开发--XMPPFramewok框架(一):基础知识
最近蘑菇街团队的TT的开源,使我对im产生了兴趣,然后在网上找到了XMPPFramework进行学习研究, 并写了以下系列教程供大家参考,有写的不对的地方,请大家多多包涵指正. 目录索引 IOS基于X ...
- app测试中,ios和android的区别
App测试中ios和Android的区别: 1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系 ...
- TCP协议与HTTP协议区别
一.TCP协议与HTTP协议区别 1.直观认识 TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页 ...
- iOS delegate, 代理/委托与协议.
之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...
- IOS开发之----协议与委托(Protocol and Delegate) 实例解析
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 在写示例之前我给大家说下@required和@optional这两个关键 ...
随机推荐
- ionic2 页面加载时图片添加的问题
使用ionic2创建项目时,在app文件夹下有图片目录img 在home中引用图片,但是不论是用ng-src或者是src,代码如下: <ion-list> <ion-slides c ...
- 10 个超酷的 HTML5/CSS3 应用及源码
1.CSS3密码强度验证表单,码速表样式 我们在网站上注册会员时,输入一个强大较大的密码会大大增加帐号安全性,那么什么样的密码才比较安全呢?这款CSS3密码强度验证表单插件可以提示你当前输入密码的安全 ...
- DB2&&oracle-培训内容
DB2 1 Data Sharing架构,高可用 2 DB2的对象主要有以下几类:database,storage group, Tablspace, indexspace, table,index ...
- RSS 订阅
<?xml version="1.0"?><%@ Page Language="C#" AutoEventWireup="true& ...
- struts2 type="redirect"源码解析
首先解释一下几个名词: request.getRequestDispatcher()是请求转发,前后页面共享一个request ; response.sendRedirect()是重新定向,前后页面不 ...
- Redis源码研究--redis.h
------------7月3日------------ /* The redisOp structure defines a Redis Operation, that is an instance ...
- 实现Server.UrlEncode和Server.UrlDecode功能的js代码
<script> var EncodeURI = function(unzipStr,isCusEncode){ if(isCusEncode){ var zipArr ...
- Oracle 表的连接方式(2)-----HASH JOIN的基本机制1
我们对hash join的常见误解,一般包括两个: 第一个误解:是我们经常以为hash join需要对两个做join的表都做全表扫描 第二个误解:是经常以为hash join会选择比较小的表做buil ...
- 转发 python中file和open有什么区别
python中file和open有什么区别?2008-04-15 11:30地痞小流氓 | 分类:python | 浏览3426次python中file和open有什么区别?都是打开文件,说的越详细越 ...
- STM32 ucosii 串口接收数据 遇到的问题及解决思路
写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...