grand-central-dispatch相关内容
我在我的应用程序中使用 Grand Central Dispatch (GCD) 来完成一些繁重的工作.该应用程序使用 Core-Data 进行数据存储.这是我的场景(以及相关问题): dispatch_queue_t main_queue = dispatch_get_main_queue();dispatch_queue_t request_queue = dispatch_queue_cr
..
我是 Grand Central Dispatch (GCD) 和 Core Data 的初学者,我需要您的帮助来将 Core Data 与 CGD 结合使用,以便在我向 Core Data 添加 40.000 条记录时不会锁定 UI. 我知道CD不是线程安全的,所以我必须使用另一个上下文,然后保存数据并合并上下文,这是我从一些文章中能够理解的. 我还不能做的是把各个部分放在一起.
..
我有一个接受块和完成块的方法.第一个块应该在后台运行,而完成块应该在调用方法的任何队列中运行. 对于后者,我总是使用 dispatch_get_current_queue(),但它似乎在 iOS 6 或更高版本中已弃用.我应该用什么代替? 解决方案 “在调用者所在的任何队列上运行"的模式很吸引人,但最终不是一个好主意.该队列可以是低优先级队列、主队列或其他具有奇怪属性的队列.
..
在我的应用程序中,我有一个函数可以创建 NSRURLSession 并使用 发出 NSURLRequest sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) 在此任务的完成块中,我需要进行一些计算,将 UIImage 添加到调用视图控制器.我有一个函数叫做 func displayQRCode
..
我搜索了各种来源,但并没有真正理解使用 NSThreads 和 GCD 之间的区别.我对 OS X 平台完全陌生,所以我可能完全误解了这一点. 从我在网上读到的内容来看,GCD 似乎与基本线程(POSIX、NSThreads 等)做完全相同的事情,同时添加了更多技术术语(“块").似乎只是将基本的线程创建系统(创建线程,运行函数)过于复杂. GCD 到底是什么?为什么它比传统线程更受欢
..
我希望能够在下一次运行循环迭代中执行 block.它是在下一个运行循环的开始还是结束执行并不那么重要,只是将执行推迟到当前运行循环中的所有代码执行完毕. 我知道以下内容不起作用,因为它与主运行循环交错,因此我的代码可能会在下一个运行循环中执行,但可能不会. dispatch_async(dispatch_get_main_queue(),^{//我的代码}); 以下我认为遇到与上述相同的
..
如果在 3 个不同的队列中调用 dispatch_sync 有什么区别 1. dispatch_sync(dispatch_get_main_queue(),^(void){NSLog(@"this 在主线程中执行")//通过 [NSThread isMainThread]}); 2. dispatch_sync(dispatch_get_global_queue(DISPATCH_
..
谁能用非常清晰的用例来解释 GCD 中 dispatch_sync 的目的是什么?我不明白我在哪里以及为什么必须使用它. 谢谢! 解决方案 当你想执行一个块并等待结果时使用它. 这种模式的一个例子是您使用调度队列而不是锁进行同步的模式.例如,假设您有一个共享的 NSMutableArray a,访问由调度队列 q 介导.后台线程可能会附加到数组(异步),而您的前台线程正在拉出第
..
我只是在玩 GCD,我已经编写了一个玩具 CoinFlipper 应用程序. 这是抛硬币的方法: - (void)flipCoins:(NSUInteger)nFlips{//创建工作队列dispatch_queue_t mainQueue = dispatch_get_main_queue();dispatch_queue_t queue = dispatch_get_global_qu
..
长期以来,我认为异步是在后台线程上运行某些东西的同义词,而同步则是在主线程上运行(阻止 UI 更新和交互).我理解不运行在主线程上进行昂贵的操作是因为它不允许在主线程被占用时发生 UI 操作,但为什么同步麻烦? 然而,我注意到你可以在主线程上进行异步调用,在后台线程上进行同步调用. 我总是听到人们说不要同步或在主线程上使用昂贵的调用,因为它会阻塞用户的 UI.这两个独立的问题是我应该确
..
我有一个 UITableView,它在每一行中显示与联系人关联的图像.在某些情况下,这些图像在第一次显示时从地址簿联系人图像中读取,如果没有,它们是基于存储数据呈现的化身.我目前使用 GCD 在后台线程上更新这些图像.但是,这会按照请求的顺序加载图像,这意味着在快速滚动期间队列变得很长,当用户停止滚动时,当前单元格是最后更新.在 iPhone 4 上,这个问题并不是很明显,但我很想支持旧硬件,并且
..
通常,如果您在 NSOperationQueue 上生成后台线程或运行 NSOperation,您需要为该线程或操作创建一个 NSAutoreleasePool,因为默认情况下不存在. 相同的规则是否适用于放置在 Grand Central Dispatch 队列中并将在非主线程上运行的块?也就是说,您是否需要在每个分派到主队列以外的任何块中创建一个 NSAutoreleasePool?
..
我在修改线程内的视图时遇到问题.我试图添加一个子视图,但显示大约需要 6 秒或更长时间.我终于让它工作了,但我不知道究竟是怎么回事.所以我想知道它为什么有效以及以下方法之间有什么区别: 这奏效了 - 立即添加了视图: dispatch_async(dispatch_get_main_queue(), ^{//一些UI方法ej[视图添加子视图:otherView];} 这需要大约 6
..
我正在努力完全理解 GCD 中的并发和串行队列.我有一些问题,希望有人能清楚地回答我. 我读到串行队列的创建和使用是为了一个接一个地执行任务.但是,如果出现以下情况会发生什么: 我创建了一个串行队列 我使用 dispatch_async(在我刚刚创建的串行队列上)三次来分派三个块 A、B、C 是否会执行三个block: 按顺序 A,B,C 因为队列是串行的 或
..
我在我的应用程序中同时使用了 GCD 和 performSelectorOnMainThread:waitUntilDone,并且倾向于认为它们是可以互换的——也就是说,performSelectorOnMainThread:waitUntilDone 是 GCD C 语法的 Obj-C 包装器.我一直认为这两个命令是等效的: dispatch_sync(dispatch_get_main_qu
..
我正在阅读苹果关于“调度队列的内存管理"的文档: 即使您实现了垃圾收集应用程序,您仍然必须保留和释放您的调度队列和其他调度对象.Grand Central Dispatch 不支持回收内存的垃圾收集模型. 我知道 ARC 不是垃圾收集器,但我想确定我不需要 dispatch_retain 和 dispatch_release 我的 dispatch_queue_t 解决方案 简
..
我正在测试一些使用 Grand Central Dispatch 进行异步处理的代码.测试代码如下所示: [object runSomeLongOperationAndDo:^{STAssert…}]; 测试必须等待操作完成.我目前的解决方案是这样的: __block BOOL 完成 = NO;[对象 runSomeLongOperationAndDo:^{STAssert…完成 = 是;}
..
在 Swift 2 中,我能够使用 dispatch_after 使用大中央调度来延迟操作: var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))dispatch_after(dispatchTime, dispatch_get_main_qu
..
我在 Swift 2.x(甚至 1.x)项目中有很多代码如下: //移到后台线程做一些长时间运行的工作dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)){让图像 = self.loadOrGenerateAnImage()//弹回主线程更新UIdispatch_async(dispatch_ge
..
我已经浏览了 iBook 来自 Apple,找不到它的任何定义: 谁能解释一下dispatch_after的结构? dispatch_after(, , ) 解决方案 更清晰的结构思路: dispatch_after(whe
..