iOS开发技术分享】协议与代理

iOS 微信分享 朋友圈 好多app中 应该会有关分享的功能,比如分享给微信好友朋友圈好友等等 下面我们来整理一下 首先去微信开放平台注册账号(是微信开放平台 不是腾讯开放平台,两者不一样) https://open.weixin.qq.com 注册完成之后记得创建应用,后边会用到。只需要注册就行, 拿到AppID 就行,不用上传app 下来我们在 微信开放平台的资源中心中下载sdk 阅读详情

iOS开发技术分享】协议与代理

【iOS开发技术分享】协议与代理

一、理解协议与代理

协议:

协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。

代理:

代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是我的代理。



二、协议的使用

在定义协议时,可以通过@required与@optional来配置遵守这个协议必须去实现的方法和可以选择的方法。譬如:


@protocol MyChooseDayViewDelegate<NSObject>  
@required  
- returnChooseDay:(id)myChooseDayView;  
@optional  
- hideThisView;  
- changeDateFormatter:(NSString*)formatString;  
@end  
在定义的协议 MyChooseDayViewDelegate中,如果遵守该协议,就必须实现协议中的- returnChooseDay: 方法,同时可以根据实际程序要求去实现- hideThisView 与 - changeDateFormatter: 。

同时,协议支持对本身的一种扩展,譬如:


@protocol MyChooseTimeViewDelegate< MyChooseDayViewDelegate>  
- doSomething; 
@end  
MyChooseTimeViewDelegate扩展了MyChooseDayViewDelegate这个协议,也就是说,假如遵守了MyChooseTimeViewDelegate的话,也必须实现MyChooseDayViewDelegate中的方法(@required)使用分类的话,就是在定义类的头文件中使用<> 将所需要的协议引入,如果引入多个协议,用","分隔,譬如:

@interface MyClassView:UIViewController <MyChooseDayViewDelegate, UIAlertViewDelegate>  
//TODO: balabalabala...  
@end  

想要检查某个类是否实现了某个协议或者某个类是否实现了某个协议的方法,可以通过以下方式来进行测试

//获取某个对象  
MyClassView *myClassView = xxxxxxx;  
//判断该对象是否实现了MyChooseDayViewDelegate协议  
if([myClassView conformToProtocol:@protocol (MyChooseDayViewDelegate)]){  
//TODO: balabalabala...  
}  
//判断对象是否实现了某个方法就用我们经常会使用到的  
if([myClassView responseToSelector:@selector(xxxx)]){  
//TODO: balabalabala...  
}  

三、代理
代理在iOS开发会被经常使用,而且代理的使用往往配合着协议。我重复一次我对他的理解,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。
举例来说,我在办公室里正在写代码,突然发现口很渴像喝瓶冰百事,但下楼是件麻烦的事情,我不愿意下楼。这个时候我想起小卖部可以商品加价2元就外送到家服务,我就打电话给小卖部,委托小卖部给我送一瓶水上来。这个时候,小卖部就是我的代理,我委托他帮买水并送上来。这个例子中小卖部是我的代理,商品加价2元外送到家服务就是商品买卖协议(这个叫法肯定不是最佳的,姑且这么叫吧)中的一个方法。
不要觉得麻烦,我们再最后理一遍,小卖部遵守商品买卖协议,我让小卖部成为了我的代理,代替我完成了买瓶冰百事的事情。
以iOS开发的角度来说,UIViewController想使用一个tableview,需要遵守UITableviewDataSource,UITableViewDelegate这2个协议,同时设置tableview的代理为自身,才可以完整的实现Table。


四、代理与协议的使用
我尽可能的用代码来进行描述,但首先需要进行一些context铺垫
我想实现的功能:我要自定义一个View,这个view可能展示了我自己项目中特定的一些信息,它可能是若干控件的组合,譬如UITextField、UISwitch、UIDatePicker、balabalabala...我们姑且叫这个view为myInformationView  我在一个ViewController使用了这个view,为了方便,这个ViewController就叫myRootViewController。在使用这个myInformationView时,我需要即时的在myRootViewController获取并做相应的处理。这是我想实现的功能。
接下来,就是开始写代码的时刻:
1.首先是一个protocol

#import <Foundation/Foundation.h>  
@class MyInformationView;  
  
@protocol MyInformatioViewDelegate<NSObject>  
@required  
@returnValueToShow:(MyInformationView*)myInformationView;  
  
@end  

2.MyInformationView

#import <UIKit/UIKit.h>  
  
@interface MyInformationView : UIView  
  
@property (nonatomic, strong) id<MyInformationViewDelegate> myDelegate;  
  
  
- (id)initWith......//初始化视图的方法  
//所需要的属性和方法根据实际需要再行添加  
@end  
#import "MyInformationView.h"  
@interface MyInformationView()  
  
@end  


@implementation MyInformationView  
@synthesize myDelegate = _myDelegate;  
  
//Todo: 处理一些初始化方法和其他一些事件  
  
// changeMyInformationData 是操作此view可能产生的数据变动。它可能是选择器变动、点击按钮等等,但我们并不想在此view处理它,因为它的变动可能对调用此view的controller造成影响,所以...  
- (void) changeMyInformationData:(id)sender  
{  
    //TODO:数据变动....  
    if ([self.myDelegate respondsToSelector:@selector(returnValueToShow:)]) {  
            [self.myDelegate returnValueToShow:self];  
        }  
}  
  
@end  

3.ViewController
这里就不写代码了,在头文件中声明此类遵守MyInformationViewDelegate协议。在实现文件(.m)中,调用MyinfomationView的时候,设置代理成自己,
MyInformation *myInfoView = [[MyInformation alloc] init.......];
myInfoView.myDelegate = self;
然后实现协议中要求实现的方法

- (void)returnValueToShow:(MyInformationView*)myInfoView  
{  
   //TODO:做想做的事情  
}  

这样就是一整套完整的代理与协议组合用法了。但其实代理与协议还可以做更多的事情,例如在页面切换时(A页面进入AA页面)...通过传入,使AA成A的代理,并对其进行操作来方便处理一些问题。以后找机会会陆续介绍。这篇文章就写到这里,谢谢。
保姆级教程:手把手教你用Python+Zemax仿真一个简易的Nd:YAG固体激光器谐振腔 本文提供了一份详细的Python与Zemax结合的Nd:YAG固体激光器谐振腔仿真教程。从基础理论到实战操作,涵盖晶体参数化、谐振腔设计、泵浦建模、动态仿真及热效应补偿等关键步骤,适合光学专业学生和工程师快速掌握激光器仿真技术。 阅读详情

相关推荐

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

iOS-Protocol(协议)和Delegate(代理)

1.基础原理 我们平时说的代理其实分为Protocol(协议)和Delegate(代理)两个部分。 协议不是代理,代理不是协议。 协议是多个类之间协商的一个公共接口,这个公共接口提供一系列方法的声明给其他类使用。 代理是协议的应用机制。 代理通俗来说就是我自己不方便去做的一些事(协议里定义的方法),我需要委托其他人来做这些事。我就是委托方,对方就是被委托方。 举个栗子: 一个View...

SunSatan的博客 637

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

IOS开发---协议和代理模式

协议它只能定义函数并且只能由其他类来实现。而委托(代理)则类似于Java接口,其实协议和委托(代理)之间并无必然联系,只是在Obj—C中常用协议来实现委托(代理)。         protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。         delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别

Try My Best! 793

14、OpenClaw(龙虾助手)Skill 开发完整规范(2026最新版)

OpenClaw Skill 开发指南摘要: Skill 是 OpenClaw AI 助手的核心扩展机制,支持声明式(SKILL.md)和原生代码(JS/TS/Python)两种开发模式。声明式 Skill 通过 Markdown 定义触发条件和执行流程,适合简单业务;原生代码 Skill 提供完整编程能力,适合复杂场景。开发需遵循标准化项目结构,包含 SKILL.md(元数据)、manifest.json(权限声明)等文件,并严格处理错误和多系统适配。新版要求原生 Skill 必须声明文件、网络等权限,确

欢迎光临~知1而N的博客 1237

52、基于格的具有解密密钥暴露抗性的可撤销(分层)身份基加密方案

本文提出了首个基于格的具有解密密钥暴露抗性(DKER)的可撤销分层身份基加密(RHIBE)方案。通过引入分层密文、分层解密密钥和级别转换密钥等创新工具,克服了格结构与传统密钥重新随机化属性不匹配的难题。该方案不仅支持可扩展的密钥撤销机制,还具备密钥委托功能,为后量子密码学领域的发展提供了新的思路和方法。

efc12345678的博客 123

iOS——通知协议代理

通知机制的核心是一个与线程关联的单例对象叫通知中心(通知中心发送通知给观察者是同步的,也可以用通知队列()异步发送通知。

m0_73348697的博客 2044

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速),滤波使用EKF。附完整代码

CV模型:状态包含位置、速度和零加速度(9维状态),状态转移矩阵忽略加速度项CA模型:完整包含位置、速度和加速度(9维状态),状态转移矩阵包含二次项过程噪声矩阵Q分别根据两种模型的运动特性推导。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 560

协议(Protocol) 和代理(Delegate)

1、概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。 代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。 block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起...

weixin_30323961的博客 280

汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换

今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。

认真搞搞汽车MCU 4015

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

IOS-协议和代理

协议和代理IOS中协议和代理是很常见的,但是肯定有很多人看他感觉挺麻烦的,所以就不想去碰他,不过,你要知道协议和代理会解决一些ios无法解决的问题(论其重要性)。什么是协议和代理简单一点来说就是页面之间的传值,当页面A跳转到页面B(可能会附带参数,这不影响),或者是页面B将数据返回给页面A.【代理模式(协议和代理者)是一种设计模式,原理是通过一个统一的模式,也可以理解为装在一个盒子里面。协议定义一...

weixin_30471065的博客 173

RT-DERT安卓部署教程

这个文档中的代码案例,实现了拍照和选图识别,两个功能,可以看效果图。UI做了美化:显示类别机和数量。代码下载地址:通过网盘分享的文件:android_rtdert.zip链接: https://pan.baidu.com/s/1k6e-d_lov1OPgUmit5i_cA?pwd=hpfi 提取码: hpfi–来自百度网盘超级会员v8的分享。

AIOT魔法师 194

iOS开发技术分享协议与代理

iOS开发技术分享协议与代理 一、理解协议与代理 协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是

xujixiaoshen的专栏 642

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【iOS开发技术分享】协议与代理

【iOS开发技术分享】协议与代理 【iOS开发技术分享】协议与代理 一、理解协议与代理 协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人

ChSaDiN的专栏 805

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IOS开发之协议和代理

【iOS开发技术分享】协议与代理 【iOS开发技术分享】协议与代理 一、理解协议与代理 协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人

xuqiang918的专栏 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ios协议 与代理

iOS开发技术分享】协议与代理一、理解协议与代理协议:协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。代理:代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是我的代理。二、协议的使用在定义协议时,可

hw的博客 451

iOS开发 - 协议与代理

转自:http://www.cocoachina.com/bbs/simple/?t134879.html 【iOS开发技术分享】协议与代理 一、理解协议与代理 协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方

zhenxi_20的专栏 746

IOS代理协议与委托

今天看到一个哥们总结delegate和protocol关系用了这样的一个比喻,觉得很贴切,拿来给大家分享一下:       把自己不想干的一些事情(洗衣做饭)找个助手来帮助你做,而你要的这个助手得有一定的能力,不是任何一个人都可以的,所以你就得有个招聘要求。好了,协议(protocol)就类似于你的招聘要求,你找到的助手就是代理(delegate)。  这样就有了  我.delegate = 助

IOS开发笔记 5101

iOS:delegate代理的使用

项目开发过程中需求是将下载的图片通过

F-ZERO-F的博客 361

iOS开发之协议和代理

【iOS开发技术分享】协议与代理 【iOS开发技术分享】协议与代理 一、理解协议与代理 协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人

cc6662075的博客 355

iOS·NSObject的两种含义:类与协议

1. 区分:类的NSObject与协议的NSObject iOS开发中,苹果提供的一些系统类都属于NSObject的子类,例如UIColor类的定义如下所示。 UIColor 或者自定义的类,也继承自NSObject,例如下图所示。 自定义类的父类 但是,NSObject不仅仅代表基类,还有协议的意思,我们可以称之根协议,例如下图所示: NSObject协议 事实上,从NSObjec...

马甲包开发审核交流群:869685378 612

iOS9友盟微信分享

此文记录了在iOS9下使用了友盟微信纯图片分享。 前提 注册友盟账号 访问友盟官方网站,在官方注册账号获取AppKey。 微信账号 登录微信开放平台(点击链接),填写相关应用信息,审核通过后获取到微信AppID及AppSecret 下载SDK 根据所需下载响应的SDK,并导入工程。 开始 导入系统库 libsqlite3.tbd libc+

joneOS的专栏 4296

关于iOS开发代理的理解

题记: 做ios好几年了,刚毕业出来的时候,对于ios的代理方法怎么都理解不了。但是也会去用。只是不理解,工作了几年之后,再回头去看当前所难以理解的事情也已经不是多么的难以理解了。因此接下吧把自己对于代理的一些理解写出来分享一下。 当对象A想做某件事时,他无能为力去做。或者说他不想去做。那么他就需要寻找一个代理去帮他做。很显然。代理的作用就是代替A去做某件事。代理跟我们日常生活中的代理意思是一样...

wangjie33589的博客 2088

快速理解ios的委托协议代理(delegate)

需求1:在需求列表中,进入需求发布页面,要求用户发布需求成功后,刷新需求列表,不能使用viewWillAppear。 需求2:在登录页中,进入注册页面,要求用户注册成功后,返回登录页面自动输入刚才注册成功的账户和密码。 其实实现起来很简单,用图来说话吧。  简单来说只需要4步: 1,声明代理协议,在当前视图控制器类中实现代理的方法

iOS攻城犭师 315

Diplomat:终极iOS第三方SDK集成方案,轻松整合微信、微博与QQ登录分享

Diplomat是一款专为iOS开发者打造的终极第三方SDK集成方案,能够帮助开发者轻松整合微信、微博与QQ等主流社交平台的登录和分享功能。通过统一的接口设计,Diplomat有效解决了多平台SDK集成带来的复杂性,让开发者可以更专注于应用核心功能的开发。 ## 为什么选择Diplomat? 在iOS应用开发中,集成第三方社交平台SDK常常是一项繁琐的任务。每个平台都有自己独特的API接口和接

gitblog_00367的博客 655
上一篇: iOS segment控件
下一篇: iOS 网络请求 重要
lanxiaoni
博客等级 码龄12年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值