block的使用场景之数据请求

参考文章

数据请求时的数据回调

背景

我们习惯把数据请求部分分离,使viewController没那么冗杂,下图中的[调用方法请求数据部分]就写在viewController里,而[数据请求部分]写在分开的文件里,我们起名为manger(就是一个普通的继承与NSObject的类,主要也是为了分离数据请求部分)。

数据请求dataTask会开启一个新线程异步执行数据请求任务,所以数据请求要得到的数据在用时需要格外谨慎,因为可能异步的数据请求任务还没有执行完,就对数据的结果进行操作,就会造成程序崩溃。

关于数据请求的实现方式:网络请求dataTask会开启新线程。通过[dataTask resume]执行网络请求任务,请求到数据后进入completionHandler(完成处理器),这也就是我们一般在下面第二张图的34行之后写回到主线程进行操作的原因,因为在这之后数据必然已经请求到了。关于同步异步可以参考我的博客 GCD

而因为我们manger类的加入,数据请求与viewController分离,所以不能在manger中操作完成后回到主线程,所以此时block的功能就派上用场。

block传值

我关于block的博客

调用方法请求数据部分
在这里插入图片描述

数据请求部分
图二

我感觉block是实现和调用分离,定义部分实现block的任务,回调的时候才执行任务,所以整个过程就是:
图一PLDailySharingManger类实现postData方法,传入参数是一个block
图二在图一的调用下实现postData方法,数据请求完成后34行result(model)实现block回调,也就是数据请求完成后,回调执行图一的block中的方法(在这个例子中是使用数据请求到的结果),完成后更新tableView。此时使用数据请求的结果,数据请求必然已经完成,所以不会造成程序崩溃。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值