dispatch_get_global_queue 与dispatch_get_main_queue

2024-03-18

开始学习核心数据和dispatch_async。有一段代码可以从数据集中获取图像的 url 并将其设置为核心数据的模型,如下所示

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
                NSString *urlString = [[[photoDictionary valueForKey:@"images"] objectAtIndex:0] valueForKey:@"url"];
                NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
                dispatch_async(dispatch_get_main_queue(), ^{
                    [photoModel setValue:imageData forKey:@"photoImageData"];

有人可以向我解释一下为什么我们使用dispatch_get_global_queue对于外部的dispatch_async和dispatch_get_main_queue对于内部dispatch_async。


The dispatch_get_global_queue (DispatchQueue.global()在 Swift 中)为您提供一个后台队列,您可以在其中调度异步运行的后台任务(即不会阻塞您的用户界面)。如果您最终向全局队列提交多个块,这些作业可以同时运行。如果您有多个代码块想要提交到必须在后台按顺序运行的后台队列(不经常需要),您可以创建自己的串行后台队列并分派到该队列,但如果并发后台操作是可以接受,然后利用自己dispatch_get_global_queue方便/高效。

但请注意,您不允许在后台队列中执行用户界面更新,因此dispatch_async to the dispatch_get_main_queue (i.e. DispatchQueue.main.async { ... }在 Swift 中)让后台队列在主队列可用时将用户界面更新分派回主队列。

这是一种非常常见的编程模式:提交一些内容在后台运行,当需要执行用户更新时,将更新分派回主队列。

欲了解更多信息,请参阅并发编程指南 http://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dispatch_get_global_queue 与dispatch_get_main_queue 的相关文章

  • 如何从 GMSPlace 地址组件中提取街道、城市等

    我正在使用适用于 iOS 的 Google Places API 可以成功检索附近的地点并将地址显示为字符串 我想做的是提取地址组件 例如城市 以存储在数据库中 文档表明 GMSPlace 有一个 addressComponents 属性
  • 有什么方法可以让dispatch_queue_t在单线程中工作吗?

    这是我的代码 interface MyObject property nonatomic dispatch queue t queue end implementation MyObject NSThread check id init s
  • Xcode 6 仪器冻结

    在 Xcode 6 Instruments 中分析我的 iOS 8 应用程序将运行该应用程序约 5 秒 然后冻结 此后探查器仍将运行 但应用程序已冻结且无法使用 发生在设备和模拟器上 无论我使用哪个分析器 计时器 泄漏等 从调试器或临时构建
  • iPad 2 检测

    由于我没有 iPad 2 因此我需要知道调用 UIDevice currentDevice model 时它返回什么 我以为它只返回 iPad 但看来我错了 有人可以告诉我吗 Thanks 检查是否有带摄像头的 iPad BOOL isIP
  • 如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化?

    var faderTimer NSTimer override func viewDidLoad super viewDidLoad self faderTimer NSTimer scheduledTimerWithTimeInterva
  • NSString keepCount 是 2147483647 [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 保留计数 https stackoverflow com questions 1390334 nsstring retain count Objective C NSString 属
  • 在 iOS 上的 OpenGL ES 2.0 中创建 16 位亮度纹理

    我的文件中有 16 位数据 我正在尝试将其加载到 iOS 上的 OpenGL 亮度纹理中 如果我手动将 16 位值重新调整为 8 位 我可以按如下方式加载和显示数据 glTexImage2D GL TEXTURE 2D 0 GL LUMIN
  • iOS:如何在不降低 fps 的情况下播放音频?

    我正在使用 Sprite Kit 最好使用 Swift 库 为 iOS 9 开发游戏 目前 我正在使用 Singleton 在其中预加载音频文件 每个文件都连接到一个单独的 AVAudioPlayer 实例 这是一个简短的代码片段来了解这个
  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • 如何将 NSSecureCoding 与 id 对象一起使用

    我正在创建一个链接列表并使用容器对对象 下一个和上一个属性进行分组 就像基金会收藏一样 我希望它能够实现NSSecureCoding 这是声明 interface ListContainer NSObject
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 是否可以扩展现有的 Objective-C 块?

    我有一个使用标头中定义的块的类 如下所示 property readwrite copy RequestSucceededBlock succeededBlock 该物业succeededBlock已经设置了一个块 有没有办法用另一个仍然调
  • 如何在 Swift 中使用indexesOfObjectsPassingTest:

    IndexOfObjectsPassingTest 的声明在 Swift 中看起来像这样 func indexesOfObjectsPassingTest predicate AnyObject Int CMutablePointer
  • 如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?

    我尝试了多个 SDK 但无法从任何资源获取电子邮件 ID 我努力了FHSTwitterEngine为此目的 但我没有得到解决方案 FHSTwitterEngine twitterEngine FHSTwitterEngine sharedE
  • UIStackView分布均匀填充

    所以 我有一个UIStackView其中包含四 4 UIViews 如果我删除其中一 1 个UIViews 其他三 3 个将填满UIStackView 我的问题 如何添加最大高度UIView这样它就不会填满整个空间UIStackView即使
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • iOS Safari Mobile 禁用上一个和下一个选择输入

    上周五我发现了关于此问题的类似问题 但似乎无法再次找到它 如果有人能指出我正确的方向 那就太好了 本质上我在一个页面上有多个选择菜单 第一个在加载时填充 第二个在第一个选择时填充 够简单的 但是 在 iOS 设备中 当您点击选择元素时 它会
  • 使用 NSString 进行 UTF8 解码

    我是 Objective C 新手 尝试使用以下示例将格式错误的 UTF8 编码 NSString 转换为格式良好的字符串苹果文档 http developer apple com library mac documentation Coc

随机推荐

  • viewWillAppear 子视图

    我有 UIScrollView 与多个 UIVIew 子视图 我想更新每个 UIView 显示在 UIScrollView 的可见部分中时显示的数据 触发的回调是什么 我尝试了 viewWillAppear 但似乎没有被调用 谢谢 你必须自
  • XQuery 中的 element() 与 node()

    有人可以告诉我两者之间的确切区别吗node and element XQuery 中的类型 该文档指出element 是一个元素节点 而node 是任何节点 所以如果我理解正确的话element 是一个子集node 问题是我有一个像这样的
  • 如何覆盖 Qwik 中的默认 404 屏幕?

    我正在测试 Builder IO 中的 Qwik Javascript 框架 但找不到任何文档可以指导我自定义 404 页面的方向 我正在使用 Qwik 的 qwik city 插件 核实 这是关于如何渲染404页面的 https qwik
  • 查找到另一组任意点的范围内的所有点

    我有两组点A and B 我想找到所有点B是在一定范围内的r to A 其中一点b in B据说在范围内r to A如果至少有一个点a in A其 欧几里得 距离b等于或小于r 两组点中的每一个都是连贯的点集 它们是根据两个不重叠对象的体素
  • 无法获得多视图控制来更改视图

    我有一个多视图控件 有两个视图 View1 是默认视图 View2 是新视图 当最终用户单击按钮时 我想将视图更改为 View2 无论如何我似乎都无法实现这一目标 ASP NET 代码
  • python/pycharm项目在调试模式下产生分段错误,但在运行模式下不会产生分段错误

    奇怪的是 在调试模式下 如果脚本在通常会发生段错误 没有断点 的地方停止 通过断点 然后恢复 则不会发生段错误 很奇怪吧 本项目使用pycharm和pygame 操作系统是 windows 10 该项目包含跨 8 个模块的约 1500 行代
  • 如何在 Qt 应用程序中使用样式表更改 QPushButton 图标大小

    是否可以使用样式表设置和更改 QPushButton 上的图标大小 我需要这个基于 qt 的模板 客户可以使用样式表对其进行样式化 在样式表中使用以下代码 qproperty iconSize 24px
  • 如何将 SQL 大容量复制与 Dapper .Net 结合使用?

    我正在使用 Dapper net 在 SQL 表中进行批量插入操作 我正在考虑使用 SQKBulk Copy 与 Dapper Net 但没有任何经验如何将 SqlbulkCopy 与 Dapper Net 一起使用 非常感谢你的帮助 使用
  • Windows 7 和 Windows Server 2008 R2 之间的差异

    Windows 7 或 Windows Server 2008 R2 中包含某些功能和 API 但另一个则不包含 在哪里可以找到差异的具体列表 如果程序要兼容两者 有什么需要特别避免的吗 当然 这个问题可以推广到任何版本的 Windows
  • Sapper/Svelte 可以有条件地导入组件吗?

    在 Sapper 中 我仅在客户端渲染时才尝试导入组件 使用onMount 有没有类似React的东西Suspense and React lazy 或者还有其他方法吗 你当然可以这样做 是的
  • Cordova 应用程序 - 构建工具错误 - Gradle

    我有一个科尔多瓦应用程序 重装系统后无法编译 我遇到了错误 Error No installed build tools found Please install the Android build tools version 19 1 0
  • 如何在 Tensorflow 的图形管道中解码 Unicode 字符串

    我创建了一个 tfRecord 文件来存储数据 我必须存储印地语文本 因此我使用 string encode utf 8 将其保存在字节中 但是 我在读取数据时陷入困境 我正在张量流数据集 API 的帮助下读取数据 我知道我可以使用 str
  • 正确的代码流程:调度动作并阻止,或者如果调度它们则提前验证?

    这是我前端开发自学一年后在Stackoverflow上的第一个问题 我已经为我的疑问找到了答案 但由于这些问题第三次出现 我认为现在是向网络提问的时候了 我正在尝试构建什么 我正在尝试建立一个图书馆服务 访客用户可以登录 预订书籍 添加到愿
  • 类型错误:func.apply 不是函数

    我正在尝试使用 useEffect 函数 如下所示 const data setData useState courses useEffect async gt const result await axios get http examp
  • Go http.Get、并发和“对等方重置连接”

    我有1000 2000个网页需要从一台服务器下载 并且我使用go例程和通道来实现高效率 问题是 每次我运行程序时 最多 400 个请求会失败 并出现错误 连接被对等方重置 很少 可能十分之一 没有请求失败 我可以做什么来防止这种情况发生 一
  • 如何将 apply_ufunc 与 numpy.digitize 一起用于沿 xarray.DataArray 时间维度的每个图像?

    为了清楚起见 我已经重新表述了我之前的问题 根据 Ryan 在单独频道上的建议 numpy digitize 看起来是实现我的目标的正确工具 我有一个形状为 x y 和时间的 xarray DataArray 我试图弄清楚我应该向apply
  • HDF5 存储开销

    我正在将大量小数据集写入 HDF5 文件 生成的文件大小约为我所输入数据的简单制表所期望的文件大小的 10 倍 我的数据按层次结构组织如下 group 0 gt subgroup 0 gt dataset dimensions 100 x
  • REST API - 是否 DTO? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在为一个项目创建 REST API 并且一直在阅读有关最佳实践的文章 许多人似乎反对 DTO 只是简单地公开域模型 而其他人似乎认为 D
  • 不要在Web应用程序spring mvc + jpa + postgreSQL中获取所有用户对象

    我使用spring MVC JPA postgreSQL开发Web应用程序 这是一些代码 文件 user java Entity Table name USER public class User implements Serializab
  • dispatch_get_global_queue 与dispatch_get_main_queue

    开始学习核心数据和dispatch async 有一段代码可以从数据集中获取图像的 url 并将其设置为核心数据的模型 如下所示 dispatch async dispatch get global queue DISPATCH QUEUE