Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS程序中异步块的内部工作?_Ios_Asynchronous_Objective C Blocks - Fatal编程技术网

iOS程序中异步块的内部工作?

iOS程序中异步块的内部工作?,ios,asynchronous,objective-c-blocks,Ios,Asynchronous,Objective C Blocks,我使用以下方法浏览iPhone中的照片库: enumerateGroupsWithTypes:usingBlock:failureBlock: 从API文档和我的测试中,我知道块是异步运行的。然而,我的问题是:这个块是如何异步运行的 也就是说,它是否通过与主线程相同的runloop运行?还是通过新的和不同的运行循环 另外,它是否在新的和不同的线程中运行?(假设“线程”与“运行循环”不同) 假设我想做一些事情来更新块内的视图(UI),尤其是: [collectionView reloadData

我使用以下方法浏览iPhone中的照片库:

enumerateGroupsWithTypes:usingBlock:failureBlock:
从API文档和我的测试中,我知道块是异步运行的。然而,我的问题是:这个块是如何异步运行的

也就是说,它是否通过与主线程相同的runloop运行?还是通过新的和不同的运行循环

另外,它是否在新的和不同的线程中运行?(假设“线程”与“运行循环”不同)

假设我想做一些事情来更新块内的视图(UI),尤其是:

[collectionView reloadData]. 
如何处理此“重新加载数据”消息?它将在与块本身相同的运行循环中处理吗?[更新问题:相对于此块的执行,“重新加载数据”是异步的还是同步的?]

最后,如果我问了一些愚蠢的问题,有人能推荐一本书或其他指南来理解iOS程序中异步块的内部工作原理吗?例如,它与运行循环和线程的关系如何

谢谢

  • 在主队列上调用该块(在主线程上运行)
  • 没有输入特殊的运行循环模式或so 你可以在编写一个简单的演示应用程序时看到它

    ALAssetFramework使用GCD分派或注册为runloop事件的源。。但这是一个实现细节

    关于更新:


    块有点像正则函数。。。因此,重载数据通常是同步的,在块中使用时将保持同步,因此

    谢谢。根据我的测试,它看起来像:1)当主线程有空闲时间时执行块。2) 该块作为单个步骤执行,即主线程和该块之间没有并行执行。关于一本好书。。我不确定。。但大多数最新的iOS编码书籍都有关于GCD的章节。那应该work@user1783732不,主_队列是串行的——永远只能有一个函数——一个块,在这两个块之间有办法推进runloop,除非您自己在该函数中调用它