文档章节

ios 异步回调选择

余成海
 余成海
发布于 2015/05/07 15:13
字数 404
阅读 144
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

异步调用,比较常用,比如网络请求等,都需要等别的模块处理完成后,我们这边再进行处理,然而外部什么时候能处理完是一个未知数,我们不能一直在等待,所以就需要做异步回调了

  1. handler-block(块)

  2. delegate(协议)

  3. notification(通知)

  4. addTarget (事件)

目前我就知道这些方法,其实原理都差不多,都是使用观察者模式,下面一一分析和使用demo:

1.handler-block(块)

block方式是比较常适用于网络请求的回调处理的

特点:就是一次调用一次反馈,一对一的模式,而且必有反馈,无论失败还是成功、易用易读

typedef void (^choiceCompletionBlock)(int index);
- (void)showTipAlert:(NSString *)message completion:(choiceCompletionBlock)completion;

[[KSAlertView shareAlertView] showTipAlert:nameErrorInfo completion:^(int index) {
            [_nameField becomeFirstResponder];
        }];

2.delegate(协议)

delegate是ios库比较喜欢用的,如UITableView、UIAlertView等

特点:是使用模块或者类会产生多种事件或数据,外部可以选择接受、处理或者无视、内传数据、结构性好

@protocol HotWorkConrtentItemDelegate <NSObject>

-(void)didSelectWithIndex:(NSInteger)index section:(NSInteger)section;

@end

if (_delegate && [_delegate respondsToSelector:@selector(didSelectWithIndex:section:)]) {
        [_delegate didSelectWithIndex:_hotWorkIndex section:_section];
    }

3.notification(通知)

notification是有NSNotificationCenter库使用,常用于公用库的反馈

特点:一对多的模式,跨度无限制,一个调用者,能有多个无关的模块接收、灵活

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

4.addTarget (事件)

addTarget常用于UIControl控件上的事件反馈

特点:持久注册、特殊反馈、多对多、好处理

[_deletePhotoBtn addTarget:self action:@selector(deletePhotoBtnClick:) forControlEvents:UIControlEventTouchUpInside];


© 著作权归作者所有

余成海
粉丝 63
博文 57
码字总数 29577
作品 0
杭州
iOS工程师
私信 提问
加载中

评论(2)

余成海
余成海 博主

引用来自“felixBubble”的评论

博主,您好!我想咨询下notification的removeObserver:应该写在那里呢?

看需求了,一般情况在viewdidload的时候notification,在deallloc的时候remove
felixBubble
felixBubble
博主,您好!我想咨询下notification的removeObserver:应该写在那里呢?
cordova与ios native code交互的原理

很早以前写了一篇博客,总结cordova插件怎么调用到原生代码: cordova调用过程,不过写得太水,基本没有提到原理。最近加深了一点理解,重新补充说明一下 js调用native 下面是我们产品中的代...

Michaelyn
2017/10/23
56
0
ReactNative与iOS原生交互方式汇总

前言 最近用RN开发SDK,涉及RN与iOS各种交互。 有些交互比如用iOS原生切换多个RN页面,以及iOS调用RN的方法,按照网上的方法调不通,一度不知如何是好,网上资料比较少。 于是自己看RN源码分...

大灰狼的小绵羊哥哥
2018/11/13
0
0
IOS NSNotification 通知

一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知  @interface NSNotification : NSObject   接口通知,继承NSObject,实现NSCopying,NSCoding协议  A container for...

冬季的暖风
2018/08/02
0
0
Unity与IOS交互,调用IOS系统相机和相册

前面两篇总结了一下unity与android的简单交互和调用安卓系统相机和相册,比较蛋疼的是,后来发现不同的测试机上会有不同的bug。。。下阶段要一个一个的解决一下 今天总结一下与IOS的交互。这...

qq_32587659
2018/05/16
0
0
iOS与JS交互之WKWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何更改iOS应用程序的名称?

我前几天用一个愚蠢的开发代码名称开始了一个iPhone项目,现在我想改变项目的名称,因为它已经接近完成了。 但是我不知道如何使用Xcode来做这件事,尝试在info.plist文件中更改应用程序的名称...

技术盛宴
28分钟前
3
0
关于win10tensorflow的配置(CPU+GPU)

主要内容 CPU篇 GPU篇 【前期准备与注意事项】 环境:window1064位+python36(37)+CUDA9.0+cuDNN7.6+tensorflow_gpu-1.12.0 软件:anaconda+pycharm 硬件:有nvidia显卡的笔记本或台式(非A...

放只虎归个山
37分钟前
3
0
C#中的多行字符串文字

有没有一种简单的方法可以在C#中创建多行字符串文字? 这是我现在所拥有的: string query = "SELECT foo, bar"+ " FROM table"+ " WHERE id = 42"; 我知道PHP有 <<<BLOCKBLOCK; C#是......

javail
44分钟前
4
0
微信支付之小微商户扫盲!支持信用卡,免营业执照!

微信支付商户申请面向线下小微商户开放,符合条件的微信支付服务商可为小微商户发起接入申请。无需营业执照。 小微商户日收款额度为5万元~30万元 。 信用卡支付日限额为1千;月限额1万。 结算...

吴伟祥
今天
4
0
大话SDWebImage(三)-- 图片下载层

四、图片下载层 SDWebImageDownloader是处理图片下载的类 4.1 图片下载步骤 首先介绍下dispatch_barrier,GCD中的dispatch_barrier目的是在并发队列实现串行的效果,创建下载任务SDWebImageD...

aron1992
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部