草庐IT

grand-central-dispatch

全部标签

ios - 在串行队列中串行下载图像非常慢

要求-我有一个要求,我收到一个JSON字典,我从中检索一组图像和内容文本。然后我必须在CollectionView中显示所有具有相应内容的图像。更新-最重要的是,我需要根据缩放到恒定宽度的图像大小来计算像元大小,我认为(可能不正确)我需要完全下载所有图像然后重新加载CollectionView问题-但问题是,当我在后台线程中下载图像并填充到单独的数组中时。然后图像无法按照它们在JSON字典中的相同顺序添加,因为我正在并发队列中下载它们。我的解决方案-所以我想到通过将所有内容放入串行队列来下载它们,这使得我的数据检索速度非常慢。对此有什么有效的替代方法?代码-letserialQueue

swift - 是否可以为 `DispatchQueue` 指定 `DispatchQueue.concurrentPerform` ?

dispatch_apply将调度队列作为参数,它允许您选择要在哪个队列上执行block。我的理解是,Swift中的DispatchQueue.concurrentPerform是用来代替dispatch_apply的。但是这个函数没有将调度队列作为参数。谷歌搜索后,我发现thisGCDtutorial其中有这段代码:let_=DispatchQueue.global(qos:.userInitiated)DispatchQueue.concurrentPerform(iterations:addresses.count){indexin//doworkhere}并解释:Thisimp

multithreading - 在后台线程上的 NSBlockOperation 之后立即在主线程上运行一个 block

在我的项目中,我使用NSBlockOperation在后台线程上运行一个操作:varoperationQueue=NSOperationQueue()variop=NSBlockOperation(block:{self.reloadSize()/*calculation...*/})operationQueue.addOperation(iop)在后台线程中的计算完成后,我需要立即在NSTableView上调用:table.reloadData()。我会在同一个线程中执行此操作,但是,由于自动布局问题,必须在主线程中重新加载表格。我怎样才能跨两个线程实现这种异步关系?

ios - 如果在GCD中为队列创建相同的名称,它是同一个队列吗?

Q1:在GCD中创建同名队列是否是同一个队列?classSample{privatevartime:Int64=0funcasyncSerial(time:Int64){letqueue=dispatch_queue_create("test",DISPATCH_QUEUE_SERIAL)dispatch_async(queue){letdelayTime=dispatch_time(DISPATCH_TIME_NOW,time)self.time=timeprint("async:\(self.time)")dispatch_after(delayTime,queue){print(

ios - 在 Swift 3.0 中从异步线程调用 UIAlertController

我有一个IBAction,它调用一个有时会显示来自异步线程的错误警报的函数。它在模拟器中“有效”,但出现此错误:CoreAnimation:warning,deletedthreadwithuncommittedCATransaction;setCA_DEBUG_TRANSACTIONS=1inenvironmenttologbacktraces.看到该错误后,我意识到我正在尝试从主线程更新UI,我需要修复它。这是我正在调用的异步函数:letqueue=DispatchQueue(label:"com.adrianbindc.myApp.myFunction")queue.async{

ios - 同步排队比异步排队时代码运行得更快。不应该相反吗?

我试图通过至少在两个不同的核心上分布它来加速一个减慢我的主线程的进程。我认为我可以做到这一点的原因是每个单独的操作都是独立的,只需要两个点和一个float。然而,我的第一个尝试是在执行queue.asnc与queue.sync时代码运行速度明显变慢,我不知道为什么!这里是同步运行的代码varblock=UnsafeMutablePointer.allocate(capacity:0)varoutblock=UnsafeMutablePointer.allocate(capacity:0)funcinitialise(){outblock=UnsafeMutablePointer.all

ios - 如何为 block 捕获变量的当前值

有没有办法保存变量的当前值以供以后在block中使用?例如,对于这个Playground代码:importUIKitimportXCPlaygroundXCPlaygroundPage.currentPage.needsIndefiniteExecution=trueclasstestClass{vari=0functest(){letdispatchTime:dispatch_time_t=dispatch_time(DISPATCH_TIME_NOW,Int64(Double(NSEC_PER_SEC))*5)dispatch_after(dispatchTime,dispatch

ios - DispatchQueue 的 Swift 3.0 未解析标识符

几个小时以来,我一直在努力寻找这个问题的答案,但仍然无济于事。我正在尝试使用以下代码:funcfetchPosts(){ref.child("Amore").child("Posts").observeSingleEventOfType(.Value,withBlock:{(snapshot)inifletdictionary=snapshot.valueas?[String:AnyObject]{letpostMod=ReviewsPostModel()postMod.setValuesForKeysWithDictionary(dictionary)self.posts.inser

multithreading - Swift dispatch_after throwing is not a prefix unary operator 错误

我有以下代码:importSpriteKitimportFoundationclassGameScene:SKScene{varoccupiedCoordinates:NSMutableArray=NSMutableArray()funcaddShape(){//...shape.position=CGPoint(x:actualX,y:actualY)self.occupiedCoordinates.addObject(NSValue(CGPoint:shape.position))lethalfDuration=random(min:CGFloat(0.5),max:CGFloat

ios - Swift 3 中的 GCD 差异

当我注意到Swift3改变了它的语法时,我正在研究GrandCentralDispatch。那么,是这样的吗:letqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)dispatch_async(queue){()->Voidinletimg1=Downloader.downloadImageWithURL(imageURLs[0])dispatch_async(dispatch_get_main_queue(),{self.imageView1.image=img1})}和这个有什么不同吗?Dispat