草庐IT

async_wait

全部标签

thread-safety - 有人可以在这种情况下为我解释 dispatch_async()

我在单独的类中有以下方法:classAPI:NSObject{vardata=NSData()vardelegate:APIProtocol?funcgetItems(callback:(Array)->()){leturlPath:NSString="http://localhost:3000/files"leturl=NSURL(string:urlPath)letrequest=NSMutableURLRequest(URL:url)request.HTTPMethod="GET"request.addValue("application/json",forHTTPHeaderF

ios - 调度组 : for-loop *and* async calls within the for-loop

我了解如何在简单的for循环中使用调度组。但是,我有一个更复杂的for循环,其中包含更多异步调用。我希望在执行组完成代码之前完成所有异步调用。我试图应用此答案中的原则无济于事-CanIusedispatchgroupnotinaloop?.这是我的代码,基于我在该链接中观察到的技术:letgroup=DispatchGroup()forrefinself.notifsRefList{group.enter()self.db.fetch(withRecordID:ref.recordID){notifRecord,notifErrinprint("asynccall")ifnotifEr

parallel-processing - Swift 是否具有通过 Grand Central Dispatch 的 dispatch_async 进行并行编程的结构?

我有兴趣采用新的Swift编程语言。我维护的代码库通过C++GrandCentralDispatch扩展(dispatch_async等)广泛使用多核处理有没有审查过Swift现状的人知道这种语言是否能够以类似的方式访问GCD? 最佳答案 是的,虽然我在Playground上没有取得太大的成功,但确实如此。在一个真实的项目中它应该工作。所有iOS8和OSX10.10文档都显示了GCD方法的Swift语法。我在当前项目中为单例使用dispatch_once,它工作得很好:NSOperation和NSOperationQueue都在底层

ios - 为什么我的代码只能在 DispatchQueue.main.async block 内运行?

这个问题在这里已经有了答案:CodeonlyworkswithinaDispatchQueue.main.asyncblock,why?(1个回答)关闭6年前。我编写这段代码是为了在用户开始编辑UITextField时选择所有文本:@IBActionfunconEditingBegin(_sender:Any){print("editingbegan")lettextfield=senderas!UITextFieldtextfield.selectAll(nil)}但它不会工作,直到我将textfield.selectAll(nil)行包含在DispatchQueue.main.as

ios - 如何判断一条语句是否需要放在DispatchQueue.main.async中?

我正在尝试在viewDidLoad中获取subview的绑定(bind)大小:(canvas.bounds)最初我没有使用DispatchQueue.main.async包装器,并且没有正确返回大小。所以通过实验,我将语句包装在主线程队列中。然后它起作用了。我知道有一个指南说“UI相关操作需要放在主线程”。但这如何转化为实际的编码经验法则:如果我只是查询一个UI属性,比如获取边界大小,我是否需要将它包装在主线程队列中吗?如果我要更改UI属性(property),例如改变边界大小,我需要把它包在里面吗主线程队列?(我想可能是的)overridefuncviewDidLoad(){supe

ios - Swift:从 url 下载数据导致 semaphore_wait_trap 卡住

在我的应用程序中,点击按钮从Internet站点下载数据。该站点是包含二进制数据的链接列表。有时,第一个链接可能不包含正确的数据。在这种情况下,应用程序获取数组中的下一个链接并从那里获取数据。链接是正确的。我遇到的问题是,当我点击按钮时,应用程序经常(尽管并非总是)卡住几秒钟。5-30秒后,解冻并正常下载工具。我明白,有什么东西阻塞了主线程。在xCode中停止进程时,我得到了这个(注意到semaphore_wait_trap):我是这样做的://ButtonAction@IBActionfuncdownloadWindNoaa(_sender:UIButton){//Startsact

ios - Semaphore.wait(timeout : . now()) 的目的是什么?

查看一些Apple代码示例,我发现了这一点:funcmetadataOutput(_output:AVCaptureMetadataOutput,didOutputmetadataObjects:[AVMetadataObject],fromconnection:AVCaptureConnection){//wait()isusedtodropnewnotificationsifoldonesarestillprocessing,toavoidqueueingupabunchofstaledata.ifmetadataObjectsOverlayLayersDrawingSemapho

ios - 线程池 : DispatchQueue. main.async

我从事过Java工作,并且非常清楚线程和线程池的工作原理。我想知道是否有人可以解释如何在swift中创建线程和在线程池中分配空间?还有,是吗Dispatch.main.async{//somecode}创建新线程还是异步执行任务?提前致谢=) 最佳答案 队列和线程是不同的概念。队列是要执行的block的有序(有时是优先级)序列。作为(主要)实现细节,block必须被安排到线程上才能执行,但这不是它们的重点。所以Dispatch.main.async分派(dispatch)(追加)一个block到主队列。主队列是串行的并且有些特殊,因

ios - 在 Swift 中使用 dispatch_async 并发分析一个数组

我正在尝试使用GCD的后台线程同时分析一张照片。这是我写的代码:dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value),0)){for(vari=0;i为了澄清变量名称,这里是它们的描述:photoAnalyzer是我编写的名为Analyzer的类的一个实例,它包含处理图像的所有方法。analyzeColors是Analyzer类中的一个方法,它执行大部分分析并返回一个字符串,其中包含传入图像的主色imageStrips是UIImage的数组,它们构成了原始图像的各个部分colorList是一个字符串数

swift - 一次多次调用 DispatchSemaphore 的 wait() 是否安全?

我得到了三个分派(dispatch)线程,名为queueA、queueB、queueC。现在我希望在queueB和queueC完成后执行queueA。所以我尝试通过DispatchSemaphore来实现它。我的问题是:在一个线程中一次调用两次wait()以使信号量为2是否安全?self.semaphore.wait()//-1self.semaphore.wait()//-1以下是完整的测试代码:classGCDLockTest{letsemaphore=DispatchSemaphore(value:0)functest(){letqueueA=DispatchQueue(labe