前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >协议和代理

协议和代理

作者头像
用户1451823
发布2018-09-13 17:22:20
3360
发布2018-09-13 17:22:20
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338198

关键词:协议、委托、代理

协议的声明有两种方式:1.单独建立一个协议(Protocol),声明在类的外部:

@protocol ClassBPtotocol <NSObject>

-(void)classBMethod;

@end

2.声明在类的内部。(声明在@interface的上面)声明在类的内部,当然就不用引入了, 但同样要遵循这个协议。

OC中虽然没有多继承,但是可以通过协议的方式实现多继承即一个类遵循多个协议,这样这个类接可以继承这多个协议的方法了。

@interface ClassC : NSObject <ClassBPtotocol, ClassAProtocol> // 同时遵守两个协议

一个类在拥有了一个协议之后,首先要引入这个协议,然后还得遵守协议,这样才能实现协议中的方法。(协议写在类的外部)

在协议中声明方法:-(void)server;

在类中引入协议+遵守协议:#import "WaiterProtocol.h"

@interface Waiter : NSObject <WaiterProtocol>

引入代理之后会增强程序的扩展性。如:在引进代理之前,我如果要找房子只能让一类人(如中介)去做我的代理,帮我找房子,而引入代理之后,我可以让更多类的人(如:朋友、同学、亲人。。。。)帮我找房子。只要这些类都遵循找房子的协议并且实现里面的方法即可。和继承有些相似。

代理中,委托人要让代理人帮自己去干某些事,委托人就要调用代理人的某些方法,这时,委托人需要将代理人作为自己的一个属性。

@property (nonatomic, assign) id <PersonProtocol> delegate;

这里用到了id,id可以用来表示各种数据类型,只要是遵循了PersonProtocol协议的代理人,委托人都可以调用他们的方法。

self.delegate server;

在主函数中要实现找房子这个功能,委托人要指定自己的具体代理人,指定中介,或是朋友又或是同学帮自己去找房子,而他们找房子的结果也是不一定完全相同的,可以让你有更多的选择。

Person * liangsen = [Person alloc init];

Waiter * everyone = [Waiter alloc init];

liangsen.delegate = everyone;

liangsen buy;

而委托人和代理人的角色是可以相互转换的。如买饭问题。你去饭店买饭,首先你是委托人负责点菜,服务员是代理人负责送菜。点菜的时候,是吃饭人调用服务员的送菜方法。在你吃完饭以后,这时,服务员成了委托人负责收钱,你是代理人负责付钱。收钱的时候是服务员调用吃饭人的付钱方法。(感觉把一件简简单单的事说的好抽象,好复杂。)

在委托人和代理人角色转换的过程中,会有一个重复引用的问题,即A类引入B类的h文件,然后B类又引入A类的h文件,为了防止这种问题,在A类引入B类的h文件之后,B类只需引入A类遵循的协议即可。

@required  @optional    默认的权限是@required

解析:从外到内,注意模型

用了协议和代理之后感觉程序的可扩展性增强了。

父类指针指向子类的对象

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年07月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档