博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
协议与代理之间的阐述
阅读量:5971 次
发布时间:2019-06-19

本文共 858 字,大约阅读时间需要 2 分钟。

今天看了一篇关于协议与代理的讲解,感觉还不错的,如下:

1、协议(protocol),就是使用了这个协议后,必须按照协议规定的内容来处理事情,协议中要求的方法必须实现(@optional的方法除外)。

protocol是一种语法,它提供了一个很方便的、实现delegate模式的机会。

定义protocol如下:

@protocol ClassBDelegate<NSObject>

  • (void)methodOne;

    @optional

  • (void)methodTwo:(NSString *)value;

定义了一个ClassB的协议,这个协议中包含两个方法,其中methodTwo为可选的。

在ClassA的头文件(ClassA.h)中实现这个协议,如下代码:

ClassA<ClassBDelegate>

在ClassA的实现文件(ClassA.m)中实现ClassBDelegate的两个方法,其中methodTwo可以不实现,如下:

  • (void)methodOne{

    // 具体实现内容

    }

  • (void)methodTwo:(NSString *)value{

    // 具体实现内容

    }

2、代理(delegate),顾名思义就是委托别人办事,当一件事情发生后,自己不处理,让别人来处理。

delegate和protocol没有关系。delegate本身是一种设计模式。是把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成。

在ClassB的头文件(ClassB.h)中定义一个代理如下:

ClassB

@property (nonatomic, unsafe_unretained) id<ClassBDelegate> delegate;
这样,当我们在ClassB的实现文件(ClassB.m)中遇到想让别的类(如 ClassA)处理的问题时,就可以这样

[self.delegate methodOne];

[self.delegate methodTwo:@"需要传递的值"];

转载地址:http://kizox.baihongyu.com/

你可能感兴趣的文章
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
Eclipse Java @Override 报错
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
使用dotenv管理环境变量
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
服务器迁移小记
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
ElasticSearch Client详解
查看>>