【Android与IOS开发对比系列】之 回调机制
Android和IOS的回调的实现原理基本相同,只是具体命名不同而已。
本文将总结 IOS的Delegate和block, Android的interface和Handler.
IOS 协议
委托Delegate是协议的一种,通过@protocol声明。委托类的作用,一是传值,二是传事件。
举个例子:
要实现选相册图片, 依据图:
C类是委托类,定义了一个传值方法。
A类显示一个图片,点击按钮,进入B类选取图片。
当在B类选完图片,将实现methodC:para方法。
返回A, 执行回调方法:
methodC:para{
//get imageView Url from para
}
Android 接口
回调Callback使用接口来实现,通过实现interface类。
举个例子:
同样可以遵循IOS的例子,
那再举个别的:要实现点击事件的调用
C类是接口类, View.OnClickListener,
A是一个Activity,B是一个Button,
初始化A, Button btn,
btn.setOnClickListener(this),
View.OnClickListener(){
}
而B则在onTouch事件中调用View.onClickListener
怎么样,很熟悉吧。
IOS block
IOS有一个block 机制 是Android没有,超级好用。
下面举三种代码讲解:
1.第一种:
typedef void (^ArrayResultBlock)(NSArray *objects, NSError *error); [self queryByStory:self.story callback:^(NSArray *objects, NSError *error) { }]; -(void)queryByStory:(Story *)story callback:(ArrayResultBlock)block{ [_dbQueue inDatabase:^(FMDatabase *db) { if (block) { block(result, nil); } }]; }
2.第二种:
VC *vc = [VC new]; vc.typeBlock = ^(NSString * result){ //do anything }; @property (nonatomic, copy) void(^typeBlock)(NSString *); - (void)method{ if(_typeBlock){ _typeBlock(@"end data restored"); }
3.第三种: block嵌套
typedef void (^CommonResultBlock)(BOOL successed); [self saveStory:^(BOOL successed) { [self saveMore:^(BOOL successed) { }]; }]; -(void) saveStory:(CommonResultBlock)block{ if(block){ block(YES); } } -(void) saveMore:(CommonResultBlock)block{ if(block){ block(YES); } }
Android Handler
如果说 block只有IOS有,Android肯定不服了,因为Android有 Handler。
其实,Handler和block的作用是一样的,只不过原理上完全不是一个概念。
下面代码举一个Handler的例子:
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == UPDATE) { tv.setText(String.valueOf(msg.obj)); } super.handleMessage(msg); } };
new Thread() { @Override public void run() { try { Message msg = new Message(); msg.what = UPDATE; msg.obj = "更新后的值:" + i; handler.sendMessage(msg); } } catch (InterruptedException e) { e.printStackTrace(); } } }.start();
当然,Handler也可想block那样嵌套使用。
另外:
如有什么观点和问题,欢迎讨论和指正。
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>