对代理的一些理解

objectC
if(currentView && [currentView respondsToSelector:@selector(viewWillAppear)]) {
[currentView viewWillAppear];
}

代理 self.delegate 其实就是为了拿到 currentView 这个类.
代理的本质就是, 如果B类遵守了代理. 并且实现了代理方法

. 那么在别的类A中, 只要能拿到这个类. 就能调用B实现的代理方法.
self.delegate 就是为了拿到这个类B.

问题二. 既然self.delegate 是为了拿到这个类, 类都拿到了, 为什么不直接掉类的对象方法, 而是去掉代理

#### 原因1.
如果有很多类都需要 < P >的方法, 写成代理只要在代理里声明就行了, 但是用类的对象方法, 需要在每一个类中去声明.我知道可以用继承解决这个问题, 但是继承有会引起很多问题, 比如. 两个 不相关的类, 用继承去做会感觉怪怪的.

#####原因2.
是限制. 我们声明delegate时, 都会写 id < P >delegate. 对于实际例子 这个其实就相当于你在A类中 写了一个属性 : B类 *delegateB. 然后用delegateB去调用 B类中实现的代理方法就很正常了. 但为什么不写成 B类 *delegateB.这样呢? 因为, 也许我还想调用 C类 里实现的代理方法. 难道要去在写一个 C类 *delegateC.吗 所以 id

delegate. 这样写最好, 只有你遵守了这个协议, 我这个属性才接受你 .


     从今天起 忘了代理把. 哪怕你没用self.delegate .只要你能拿到 B对象. 你就可以直接  用B类 取调用B类实现的 <P>里的方法.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值