Java监听器和Object C协议代理

先不管什么语言,我们先想象一种编程场景,A类中创建了一个B对象,A和B之间要怎么通信呢?A要主动和B通信没有问题,因为B是在A中创建的,A自然拥有B的引用,能知道B的可用的方法,调用B的方法,就可以和B通信了。可是B要怎么和A通信呢?那么B也要有A的引用,调用A的方法通信。

这种通信方式,如果A和B都是自己写的代码,这样没有问题。可是,B是一个库代码,将来可以给别人用,A和B通信没问题,因为,你集成B的库后,可以直接调用B的方法。可是B要和未来的A通信怎么弄呢?要解决这个问题,B就需要定义出,B主动和未来A通信的规范,未来的A实现了这个规范,B就可以和未来的A通信了。

在java中B定义的规范是通过interface来实现的,就是监听器。

在OC中是通过协议代理实现的。

其实思想是一样的,B中定义了interface,A实现了这个interface,然后把this传给了B,这里用到了多态,这样B就可以通过this,和A通信了。从协议代理的角度来说,B定义的interface是协议,A实现了这个协议,这样A就代理了B的一部分功能。

不过,在Java中,A有可以有内部类或者匿名内部类实现inteface,然后把内部类的实例传给B,因为内部类是自动捕获A的引用的,所以,这样B也能和A通信。不知道OC中能不能这样搞。

还有一个概念就是监听器/协议代理是实现MVC框架的基础。

上面提到,java使用匿名内部类的方式,其实OC中有相应的替代,就是Block(匿名函数),Block加OC 的属性使用,很方便,很好用。

比如,一个点击时间的block

@property(nonatomic, copy) void(^onLocalPlayBtnClick)(void);

 

 

 

Object-C篇-设计模式之协议

object c 代理设计模式,有点像java的监听

object c的协议,正式协议几乎等同于java的接口

object-c 协议(Protocols)和代理(Delegation)的学习

Objective-c中的delegate浅析

关于iOS Delegate的个人理解

java监听器的原理与实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值