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

相关文章

如何在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

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台