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 委托和协议区别和联系 (-)相关推荐

  1. app测试中ios和Android的区别:

    app测试中ios和Android的区别: 1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.多分辨率测试,Android端20多种,ios较少: 3.机操作系统,An ...

  2. app测试中ios和Android的区别

    1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.多分辨率测试,Android端20多种,ios较少: 3.机操作系统,Android较多,ios较少且不能降级,只能单 ...

  3. java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!

    智能手机系统的发展从如今的百花齐放在到三足立鼎,而发展到了现在则是安卓与ios两家平分天下.谁的系统好用?到底是IOS好呢,还是安卓系统好呢?至今没有一个结果.那么Android与iOS到底有什么区别 ...

  4. 详解Objective-C中委托和协议

    Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于"委托"则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可 ...

  5. 详细讲解委托和协议、看了这个我顿悟--很经典!

    转:http://blog.sina.com.cn/s/blog_4cd8dd130100uqui.html Objective-C中委托和协议是本文要介绍的内容,委托和协议是两个概念,协议实际上相当 ...

  6. 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 ...

  7. App测试中ios和Android的区别1

    App测试中ios和Android的区别: 一.多分辨率测试 1.手机常见分辨率: 4:3 VGA     640*480 (Video Graphics Array) QVGA  320*240 ( ...

  8. IOS跟ANDROID的区别

    大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...

  9. 软件开发委托(单位)协议

    软件开发委托(单位)协议 2006-12-7 16:15:51       作者 baihehua 浏览人次   收藏人次         文件大小 101KB 需要积分   共享方式 完全共享   ...

最新文章

  1. 9大领域50名青年学者获2021年科学探索奖,单人奖金300万元
  2. Modular Multiplicative Inverse(模乘逆元)
  3. 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
  4. B06_NumPy 切片和索引
  5. 【转】C#中的命名空间namespace全解
  6. c语言按键实现跳转程序,C语言中的跳转语句
  7. [转载] python 去除字符串的标点符号 用_Python成为专业人士笔记–String字符串方法
  8. Instagram的百万美元Bug
  9. 说“诡”道“诈”——解读“兵者,诡道也”+——文献综述
  10. IDM+毒(du)盘 = 高速下载互联网中大部分资源
  11. bmob php,文档-Bmob移动后端云服务平台
  12. 链游是什么意思 链游和游戏的区别是什么
  13. 三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解
  14. Kmeans聚类时K值选择的方法
  15. 谷歌、微软、Meta?谁才是 Python 最大的金主?
  16. python end函数用法_python end用法是什么?_后端开发
  17. 魔塔小游戏Java版项目完整版
  18. FIR数字滤波器设计(中)
  19. 创建Android定时器的5种方法
  20. vue+element ui+腾讯云开发打造会员管理系统之实战教程(三)系统登录

热门文章

  1. ITK:与矢量型图像应用GradientRecursiveGaussianImageFilter
  2. VTK:PolyData之CurvaturesDemo
  3. VTK:Filtering之Delaunay2D
  4. OpenCV无缝克隆不带GUI的模块的实例(附完整代码)
  5. C++二叉搜索树(Binary Search Tree)(附完整源码)
  6. C++ 中 struct 和 class
  7. 经典C语言程序100例之七
  8. C语言必知的几个概念
  9. 简单阻容降压电路图_X2安规电容用于阻容降压容量衰减原因及对策
  10. redhat下安装mysql 5.6.20,解压zip包,查看已经安装过的mysql,卸载rpm安装包,安装mysql服务器端和客户端,修改mysql用户名,登陆mysql,启动关闭mysql