ios 协议和代理

本文介绍了iOS中协议和代理的概念及应用。协议在iOS中相当于接口或虚函数,用于声明一组方法规范。通过中介租房的例子展示了如何定义和遵循协议。代理是一种设计模式,允许对象委托其他对象来完成特定任务。文中还详细解释了@required和@optional关键字的使用,并通过代码展示了如何设置和使用代理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ios中,提到协议(protocol)必然涉及代理(delegate), 反之亦然。

1. 协议:在ios中没有其他语言的接口或是虚函数这一说,但是有一个类似的功能,就是协议:声明一组方法规范。

下面以租房为例:

//协议

@protocol rentRoom<NSObject>

@requested

-(void)getRoom; // 找房子

@optional:

-(int)price;

-(CGFloat)area;

@end

中介看到了我贴的这份租房协议,想挣点中介费,就开始帮我推荐符合上述的房子。

//.h

//中介

@interface Intermediary:NSObject<rentRoom>

@end

//.m

@implement Intermediary

-(int)price{

return 2000;

}

-(void)getRoom{

  return YES;

}


-(CGFloat)area{

return 32.5;

}

@end

上述就是协议,看完之后,是不是觉得这不是借口,或者说是虚函数吗?这么理解也没错,但有点偏差,ios的继承是@interface subClass:supClass,

协议是@interface subClass:supClass<youProtocal>或是@interface youClass<youProtocal>,这里叫遵守某个协议,不是继承!

另外,我们知道ios不支持多继承,但是可以遵守多个协议,多个协议之间用逗号隔开,从而实现类似的共功能功能:

@interface subClass:supClass<youProtocal, moyProtocal>

//TODO

@end

至于上面的@requested 和@optional是说明协议方法是否必须实现,前者必须是,后者可以不实现,但没有实现的请忽调用(事实是,这只是一个约定,声明为@requested,如果你用不到不实现也可以,但是会有烦人的警告);


2. 代理:是一种设计模式,但没必要特意先去看代理模式,不影响理解。

代理就是没有能力或是不想做弄事,使唤别人来做。

接着上面的租房子,我现在工作很忙,但又想换房子,所以我打个电话给中介,说我要找房子,我跟中介说了一下房子的条件(协议):价格是2000/月,面积是32平的,就是上面的rentRoom协议了


//.h 找房子类

@interface Me:NSObject{

@property (nonatomic, strong) Intermediary * _Intermediary; //中介

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

}

-(void)setUpDelegate:(id<rentRoom>)dg;

-(void)findRoom;

@end


//.m


-(void)setUpDelegate:(id<rentRoom>)dg

  self.delegate = dg;

}

-(id)init{

if([super init]){

_Intermediary =[[Intermediary  alloc] init];

}

}


-(void)findRoom{

if([self.delegate responsesToSeletor[@selector(getRoom)]]){

[self.delegate getRoom];

}

}


Me类应该拥有代理(@property (nonatomic, assign) id<rentRoom> delegate),否则无法设置代理。

也就是说只要中介(代理)遵守了我制定的协议,不论是长寿路的,还是祥德路的中介,都可帮我我找房子,也就是成为我的代理。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值