草庐IT

grand-central-dispatch

全部标签

iphone - 在 UITableView 中,取消屏幕外单元格的 GCD 操作的最佳方法是什么?

我有一个UITableView,它使用GCD将图像从URL异步加载到单元格中。问题是,如果用户轻拂超过150行,则有150个操作排队并执行。我想要的是出队/取消那些过去并离开屏幕的。我该怎么做?此时我的代码(相当标准):-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath//aftergettingthecell...dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_

ios - 为自定义创建的串行异步队列设置优先级

如何使用GCD为自定义创建的串行异步队列设置高优先级?我看过thisQ&A其中建议使用dispatch_set_target_queue()并传递高优先级队列(DISPATCH_QUEUE_PRIORITY_HIGH),这是自定义串行异步队列的并发队列。我的理解是,这将使串行队列上的所有任务并发执行。我的理解正确吗?如果是这样,替代解决方案是什么? 最佳答案 在iOS8之前,将目标队列设置为高优先级队列是实现此目的的方法。即使目标队列是并发的,您的队列也将保持串行。从8.0版开始,还有另一种方法可以做到这一点:dispatch_qu

ios - 无形的执行顺序(dispatch_semaphore_t、dispatch_group_async)以及它们与不同调度队列类型的结合使用

我只是在晚上花了一些时间来研究GCD,尤其是dispatch_semaphore_t,因为我从未使用过它。从来不需要。所以我写了下面的作为测试:-(void)viewDidLoad{UIView*firstView=[[UIViewalloc]initWithFrame:(CGRect){{0,0},self.view.frame.size.width/4,self.view.frame.size.width/5}];firstView.backgroundColor=[UIColorpurpleColor];[self.viewaddSubview:firstView];dispat

ios - 等待异步方法在 for 循环中完成

我有一个包含三个异步方法的for循环,我想在这3个异步方法完成后做一些处理。-(void)getAllUsersInformations{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{for(User*userinusers){[selfgetUserInfo:user];}//Here,Iwanttoreloadthetableviewforexample,afterfinishingtheforloop(executingthewholethreemethods).});}

iphone - 如何创建一个始终串行的 GCD 队列,即使在多核 CPU 上也是如此?

据我了解非主队列GCD队列,默认情况下它们仅在具有单核CPU的设备上是串行的。但是,如果设备具有多个内核,则可能会同时执行队列中的block。我想使用串行GCD队列来克服一些并发问题,即使有多个内核,这个队列也必须是串行的。一位开发人员提到这在某种程度上是可能的。我将如何创建这样一个始终串行的队列? 最佳答案 可以通过dispatch_get_global_queue函数获得的标准GCD队列确实是并发的。但是您可以使用dispatch_queue_create创建自定义gcd队列功能。将DISPATCH_QUEUE_SERIAL作为

ios - dispatch_queue_set_specific 与获取当前队列

我试图弄清楚这两者之间的区别和用法:staticvoid*myFirstQueue="firstThread";dispatch_queue_tfirstQueue=dispatch_queue_create("com.year.new.happy",DISPATCH_QUEUE_CONCURRENT);dispatch_queue_set_specific(firstQueue,myFirstQueue,(void*)myFirstQueue,NULL);问题#1这有什么区别:dispatch_sync(firstQueue,^{if(dispatch_get_specific(my

ios - 在当前队列上同步调度

我知道您可能会觉得这是一个奇怪的问题,但我只是在学习GCD,我想全面了解它的各个方面。所以这里是:是否有任何理由在CURRENTQUEUE上调度任务SYNC?例如:dispatch_queue_tconcurrentQueue=dispatch_get_global_queue(...);dispatch_async(concurrentQueue,^{//thisisworktask0//firstdosomethinghere,thensuddenly:dispatch_sync(concurrentQueue,^{//worktask1});//continueworktask0

ios - 暂停调度队列是否会暂停其目标队列?

我想创建两个串行队列A和B。其中队列B是队列A的目标。我想在B上排队一些block,并暂停它直到我准备好执行它们,但是我想继续执行队列A上的block。如果我暂停B,这是否也会暂停它的目标队列(队列A)?我的想法是我想安排这些特定的block(在队列B上)在以后(未指定的)日期执行,但是我不希望它们同时运行(这涉及核心数据^_^)并且我不想处理信号量。但是我希望队列A继续处理它的block,而B被暂停如果不清楚这里有一些示例代码dispatch_queue_tqueueA=dispatch_queue_create("app.queue.A");dispatch_queue_tqueu

ios - swift 3 中的调度队列显示为未解析的标识符

这个问题在这里已经有了答案:Swift3.0unresolvedidentifierforDispatchQueue(2个答案)关闭6年前。我正在尝试在主线程上异步拍摄/录制视频。然而,当我调用dispatch.main.async时,我总是得到错误:useofunresolvedidentifierDispatchQueue从WWDC到Apple的文档,我到处都看过,但没有看到任何类型被弃用的证据。代码如下:if!self.cameraEngine.isRecording{ifleturl=CameraEngineFileManager.temporaryPath("video.mp

ios - 通过示例了解何时使用 dispatch_get_main_queue 和 requiresMainQueueSetup

前一段时间我在这里问过类似的问题:DifferencerequiresMainQueueSetupanddispatch_get_main_queue?我今天回过头来发现我还没有完全掌握它。当我们为iOS编写ReactNative模块时,iOS端有dispatch_get_main_queue并且react-native需要requiresMainQueueSetup。对于以下包和用例,应该如何使用其中的哪一个?asq-react-native-device-导出包ID等常量的包asq-react-native-sensors-允许从设备陀螺仪和其他传感器订阅和接收数据的包asq-re