IOS 委托和协议区别和联系 (-)
2019独角兽企业重金招聘Python工程师标准>>>
IOS 委托和协议区别和联系 (-)
IOS上的协议类似于C#、Java上面的接口,他是从类中抽出来的一系列方法,但方法的实现是在实现这个协议的类中,任何实现这个协议的类都需要实现协议类中的@require方法;
委托是一种设计模式,是一种设计思想。
但是在IOS上面委托经常依托协议来实现(但并不是必须的)。一个很好的例子就是老板和秘书:老板要经营企业需要对新员工培训、对公司管理、打电话、发薪水等工作,但是对应老板来说一些事情例如打电话、发薪水的工作可以通过秘书来做,老板自己只负责对员工培训、公司管理,别的事情委托给秘书来做。委托思想就是在这种类似情况下产生的。
再说一下为什么IOS上面的委托经常依赖协议来实现?就像老板需要一个会打电话、发薪水的秘书来减轻老板自己的工作,但是老板并不知道谁有这两项技能,那老板就会发一个招聘,招聘会这两项技能的人。但老板怎样知道应聘人员会这两项技能那,老板会通过你的学历和工作经验判断应聘人员是否会这两项技能;但是对于程序来说,在不知道这个类的内部情况下怎样知道这个类是不是可以委托,评判标准是啥?这个时候如果一个类实现一个有这两项技能的协议,则能很容易判断出这个类具有这两项技能。这个就是IOS上面为什么委托经常和协议一块用。
例子待续...
协议
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#import <Foundation/Foundation.h>
//协议是从类抽出的一些方法,如何实现这个协议的类都需要实现这里面的方法
@protocol SecProtocol <NSObject>
@required
//发工资
- ( void )payoff;
//打电话
- ( void )tel;
@optional
@end
|
Boss
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#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
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#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
?
1
2
3
4
5
6
|
#import <Foundation/Foundation.h>
#import "SecProtocol.h"
// 秘书类,实现协议, 委托对象
@interface Sec : NSObject<SecProtocol>
@end
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#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
|
调用方法
?
1
2
3
4
5
6
7
8
9
|
Boss *boss = [[Boss alloc] init]; //委托人
Sec *sec = [[Sec alloc] init]; //委托对象,实现了一定协议的对象
boss.delegate = sec; //将委托对象复制给委托人里面的委托对象
[boss teach];
[boss manage];
[boss tel];
[boss payoff];
|
转载于:https://my.oschina.net/fadoudou/blog/516171
IOS 委托和协议区别和联系 (-)相关推荐
- app测试中ios和Android的区别:
app测试中ios和Android的区别: 1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.多分辨率测试,Android端20多种,ios较少: 3.机操作系统,An ...
- app测试中ios和Android的区别
1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.多分辨率测试,Android端20多种,ios较少: 3.机操作系统,Android较多,ios较少且不能降级,只能单 ...
- java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!
智能手机系统的发展从如今的百花齐放在到三足立鼎,而发展到了现在则是安卓与ios两家平分天下.谁的系统好用?到底是IOS好呢,还是安卓系统好呢?至今没有一个结果.那么Android与iOS到底有什么区别 ...
- 详解Objective-C中委托和协议
Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于"委托"则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可 ...
- 详细讲解委托和协议、看了这个我顿悟--很经典!
转:http://blog.sina.com.cn/s/blog_4cd8dd130100uqui.html Objective-C中委托和协议是本文要介绍的内容,委托和协议是两个概念,协议实际上相当 ...
- tcp协议和udp协议区别_TCP和UDP协议有什么区别?
tcp协议和udp协议区别 TCP and UDP are two protocols that are part of the transport layer in a TCP/IP model o ...
- App测试中ios和Android的区别1
App测试中ios和Android的区别: 一.多分辨率测试 1.手机常见分辨率: 4:3 VGA 640*480 (Video Graphics Array) QVGA 320*240 ( ...
- IOS跟ANDROID的区别
大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...
- 软件开发委托(单位)协议
软件开发委托(单位)协议 2006-12-7 16:15:51 作者 baihehua 浏览人次 收藏人次 文件大小 101KB 需要积分 共享方式 完全共享 ...
最新文章
- 9大领域50名青年学者获2021年科学探索奖,单人奖金300万元
- Modular Multiplicative Inverse(模乘逆元)
- 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
- B06_NumPy 切片和索引
- 【转】C#中的命名空间namespace全解
- c语言按键实现跳转程序,C语言中的跳转语句
- [转载] python 去除字符串的标点符号 用_Python成为专业人士笔记–String字符串方法
- Instagram的百万美元Bug
- 说“诡”道“诈”——解读“兵者,诡道也”+——文献综述
- IDM+毒(du)盘 = 高速下载互联网中大部分资源
- bmob php,文档-Bmob移动后端云服务平台
- 链游是什么意思 链游和游戏的区别是什么
- 三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解
- Kmeans聚类时K值选择的方法
- 谷歌、微软、Meta?谁才是 Python 最大的金主?
- python end函数用法_python end用法是什么?_后端开发
- 魔塔小游戏Java版项目完整版
- FIR数字滤波器设计(中)
- 创建Android定时器的5种方法
- vue+element ui+腾讯云开发打造会员管理系统之实战教程(三)系统登录
热门文章
- ITK:与矢量型图像应用GradientRecursiveGaussianImageFilter
- VTK:PolyData之CurvaturesDemo
- VTK:Filtering之Delaunay2D
- OpenCV无缝克隆不带GUI的模块的实例(附完整代码)
- C++二叉搜索树(Binary Search Tree)(附完整源码)
- C++ 中 struct 和 class
- 经典C语言程序100例之七
- C语言必知的几个概念
- 简单阻容降压电路图_X2安规电容用于阻容降压容量衰减原因及对策
- redhat下安装mysql 5.6.20,解压zip包,查看已经安装过的mysql,卸载rpm安装包,安装mysql服务器端和客户端,修改mysql用户名,登陆mysql,启动关闭mysql