美文网首页ios积累
怎样等待 assetForURL: 的block 调用(bloc

怎样等待 assetForURL: 的block 调用(bloc

作者: reinventjianshu | 来源:发表于2015-03-23 12:23 被阅读2123次

      - (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock  failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;

当我们用assetForURL:获取相册的图片时,我们只能通过回调才能获得image,也就是说你想对获得的image做什么操操作,只能把代码放在assetForURL:的回调中。

但像下图中的需求,我们需要在for循环完,所有图片取出后再做处理,回调中我们只是不断把取到的image暂存到toUploadImageArray数组中。接下来我们在for循环结束后判断toUploadImageArray是否为空。

异步

是否为空呢?是的,全部为空,这是因为block的回调全部为异步任务,当for循环体执行完毕,马上就会执行下面的代码,block的回调被放在了本线程的最后才会执行,所以你什么都取不到。

解决这个问题就要用到GCD,代码看下图

同步

通过dispatch_semaphore_wait信号量控制,使得程序只有执行完了回调,获得sema信号后才会执行dispatch_semaphore_wait后面的代码。

经过测试,这里即使不把assetForURL:加入串行异步任务,仅用信号量控制也能实现同步,但保险起见建议还是不要这样做。

注意:

还有同学可能会遇到这样的问题,在加入上述同步控制后,把主线程卡死了,这时我们只需要把信号控制加入到dispatch_async中问题应该就可以解决了

受自身水平限制,文中难免会有疏漏,如有错误敬请指出,转载请注明出处,谢谢

参考:

stackoverflow : Wait for assetForURL blocks to be completed

相关文章

  • 怎样等待 assetForURL: 的block 调用(bloc

    - (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAss...

  • 九、Block之(一)Block内部结构及调用本质

    一、Block内部数据结构 1.调用分析 2.关于block调用中 block->FunPrt()的理解 bloc...

  • Block的相关问题

    (1)block的概念:block 是将函数和执行上下文 封装起来的对象。block调用-->函数调用。 bloc...

  • iOS Block学习与使用

    Block 一.什么是block block是将函数调用及其上下文封装的OC对象,内部也有isa指针 二.bloc...

  • Swift闭包变量捕获趣味题

    题目一 block的参数是外界传入的,调用时block传入的参数值为"雅迪",所以答案为我开雅迪 题目二 bloc...

  • Block探索

    Block block 类型**1、全局block - **NSGlobalBlock**** **2、栈bloc...

  • OC中的Block

    1.Block的本质 Block是从C语言的匿名函数发展而来,是通过函数的指针对函数进行调用的一种方式。 Bloc...

  • Block整理

    Block block其实就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用。那bloc...

  • block循环引用原理

    在block中调用self就回造成循环引用?当然不是。要创造出一个循环引用的block需要两个条件:1、在bloc...

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

网友评论

  • 58cb860debdd:把wait加入异步线程后,下面的方法就直接执行了
  • 超_iOS:按照楼主的来写并没用啊,wait的时候是0,他会一直等待下去啊?求楼主或大神解答
    WTG:@李二超 楼主的方法是在子线程中执行、不是在主线程、你的在主线程肯定会造成死锁
  • 超_iOS:把这些GCD写到for循环中不会出问题吗??求大神解答
    超_iOS:@李二超 但保险起见建议还是不要这样做,请问为什么非要加入队列啊

本文标题:怎样等待 assetForURL: 的block 调用(bloc

本文链接:https://www.haomeiwen.com/subject/tikgxttx.html