OC学习 第九节 代理协议

2024-02-26 08:08

本文主要是介绍OC学习 第九节 代理协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

day9 代理和协议
================


代理设计模式
比如工人工作,要求发工资,他自己不能给他自己发工资,由老板发工资,老板在这里就是工人的代理

比如工人工作之后,老板要发工资,老板对财务不太懂,委托给财务人员发工资
财务就是老板的代理,他负责发工资给员工。

你要注册公司,要去工商局注册。交给托管公司给跑,他们帮你注册公司。
在这里,托管公司就是你的代理。


协议初步(UI中应用:大量的项目)
一、协议
1.什么是协议
就业协议  
贷款协议
购房
租房:
劳动合同:

协议:
两个事物之间达成某些约定
协议规定了遵守协议的事物

找男友
满足以下协议(条件)的人可以做我男朋友

协议名:《征猪条款》 <LookPigItem>  
一系统条款:
0. 男的,活的 - (void)liveMan;
1. 以老婆为中心 - (void)centerWife;
2. 以疼老婆爱老婆为宗旨 - (void)loveWife;
3. 工资上交 - (void)salarySubmit;
4. 不得和其他女生暧昧 …
5. 洗衣服 …
6. 做饭
7. 不得打骂老婆
8. 身高 …
9. 学iOS的 - (void)iOSProgrammerMonkey;



员工&老板
老板要发工资,老板实现发工资的协议
《发工资条款》
<PaySalary>

- (void)paySalaryToWorker:(Worker *)worker {}

Worker
// @property (nonatomic, assign) Boss *myBoss;
@property (nonatomic, assign) id<PaySalary> myBoss;

Boss *boss = [[Boss alloc] init];
Worker *worker = [[Worker alloc] init];
worker.myBoss = boss;
Boss遵守<PaySalary>协议,并实现协议的方法(执行协议),这样Boss才有资作为worker.myBoss

条款由谁制定?
主动方制定。谁是方动方?worker.myBoss,这个指针指向能实现协议的对象,我这个指针不是随便乱指的,要想让我指向你,你就得遵守我的规定(要能发得起工资)。员工是主动方,员工制定协议。

员工有一个myBoss指针,指向实现协议的对象。老板实现协议,被动方。

// 协议就是来规范接口
    ▪    比如USB接口(不管什么牌子的USB查到电脑上都认识)
    ▪    网线水晶头的网线也是遵守协议的
    ▪    鼠标口, 键盘口都是有协议的
    ▪    协议 作用:规范接口
协议举例


2.代码中的协议
OC    @protocol
java   接口
c++    抽象类

OC协议
规定了遵从协议的类,需要实现的方法
这个类遵守协议之后,这个类的实例对象也就遵守了协议
类通过尖括号遵从协议,实现要求的方法

3.协议的应用与功能
a.应用
    1.(主要功能)规范接口(协议规范接口是强制的)

    2. 实现委托代理机制(实现对象之间的通信)  代理设计模式(iOS中常见)
            规范代理的行为-》传值

b.功能
    ▪    协议就是为了满足统一的数据传输
    ▪    一个类只能继承一个直接的父类,但可以通过实现多个接口(遵守多个协议),间接的实现了多继承.

协议练习
1.排序规范接口
//动物收容所
/* AnimalHome
    1. 收听话的动物(动物要听话,实现听话方法)
    2. 对不同的动物进行身高排序(不同动物的比较身高的方法 有可能不同)
*/

2.实现类似c++的多继承

现在有多个类,一个是加法器类(会算加法) 第二个类是减法器类(减法功能)第三个乘法器类(乘法)第四个除法类

Computer 继承于上面这四个类

实现一个类分别可以进行+-*/

c++可以用多继承实现
但是OC没有多继承 但是OC可以通过协议来实现


二、代理&协议

代理 是iOS的一种设计模式 一种技术
协议:Objective-C的语法  作用:规范接口

委托就是代理
A委托 B做一些事情   (B是A的代理)
或者B委托A做什么   
用协议来规范代理的行为

2.反向传值

代理练习

1.买木头
  老板张  不会买木头  
  员工王  会买木头

老板张委托员工王 买木头
老板制定协议(买木头)

模拟这个过程

公司老板  不会开车 招聘一个司机  协议(会开车)
worker  li  会开车
老板 招聘li  作为司机
老板就可以委托 li  开车

模拟上述过程
只要发生了委托关系 那么就是代理设计模式

协议的功能 仍然是规范方法

练习:

1.创建广播站类和收音机类
广播站
方法:
    播音(参数是一个字符串)

制定协议:接收广播

使用代理要注意的地方

收音机
方法:
    收音并播放(参数也是字符串)  实现播放协议

作业.
用代理设计模式,结合协议写一个示例
程序员打代码 程序员要求老板发工资(程序员本身发不了工资),把老板作为代理
老板发工资

- (void)go {
    /** 这种写法可以
    Worker *worker = [[Worker alloc] init];
    self.worker = worker; // [self setWorker:worker]
    [worker release];
     */
    
    self.worker = [[[Worker alloc] init] autorelease];
    
    // 下面这种写法也可以,但是不建议这样做
    // self.worker = [[Worker alloc] init];
    // [_worker release]; // 对成员变量的release应该放在dealloc中,因为成员变量是对象的一个成员,应当随着对象生命的终结而消失,所以说一般来讲,对成员变量(对象)的释放理应放在dealloc中,因为dealloc代表当前对象的释放
    
    _worker.myBoss = self; // 让员工知道老板
    [_worker work];
}

// 实现协议方法
- (void)paySalary:(Worker *)worker {
    NSLog(@"老板要发工资了...");
    [worker receiveMoney:1000];
    
    // [self.worker receiveMoney:1000];
    // 用self.worker也可以,因为我们现在就一个员工
}

- (void)passValue:(NSString *)str {
    NSLog(@"%@", str);
}

- (void)dealloc {
    [_worker release];
    
    NSLog(@"%s", __func__);
    [super dealloc];
}


@implementation Worker

- (void)work {
    for (int i = 0; i < 3; i++) {
        NSLog(@"干活...");
        sleep(2);
    }
    
    [self workEnd];
}

- (void)workEnd {
    // 要求实现协议的 _myBoss 发工资, 调用 _myBoss 的paySalary:方法
    // paySalary:方法是协议中的一个条款项,_myBoss遵守了协议,实现协议中的条款 paySalary:
    [self.myBoss paySalary:self];
    
    [self.myBoss passValue:@"可以给我涨工资了!"];
}

- (void)receiveMoney:(float)money {
    NSLog(@"员工收到了工资:¥%f", money);
}

- (void)dealloc {
    NSLog(@"%s", __func__);
    [super dealloc];
}

@end


这篇关于OC学习 第九节 代理协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748186

相关文章

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学