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

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio