草庐IT

grand-central-dispatch

全部标签

Swift:从 dispatch_async 内部返回结果

所以我这里有一段代码不起作用。这是因为它在尝试解包可选值时发现nil。这是因为它在异步方法中被初始化。我的问题是,如何在函数获取结果之前推迟返回函数?structDomain{varname:String?vartld:String?varcombined:String{get{returnself.name!+self.tld!}}varwhoIs:String{get{ifself.whoIs.isEmpty{varresult:String?dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAU

ios - 调用之间的调度和延迟

我正在为那个老游戏Simon(在巴西又名Genius)制作一个克隆版,这个游戏带有for彩色按钮,玩家需要按照一系列颜色按下这些按钮。为了测试,界面有4个彩色按钮我为按钮socket创建了一个数组,以便于访问:varbuttonArray:[UIButton]=[self.greenButton,self.yellowButton,self.redButton,self.blueButton]此外,创建了另一个数组来存储颜色序列varcolors:[Int]=[]当游戏开始时,它会调用一个函数,该函数将一个从0到3的随机数相加(buttonArray上的索引),并将此数字添加到颜色数组

ios - 如何一个接一个地执行多个异步请求

我有一组异步执行的请求。但是,每个下一个请求只能在上一个请求完成时开始(由于数据依赖性)。由于所有请求都应该以正确的顺序完成,DispatchGroup()似乎没有用。我目前实现了DispatchSemaphore(),但我觉得这不是最佳解决方案,因为我想确保所有请求都在后台执行。letsemaphore=DispatchSemaphore(value:requests.count)forrequestinrequests{apiManager().performAsyncRequest(request,failure:{errorinprint(error);semaphore.si

swift - MacOS 上最准确的计时器

我有一个应用程序可以从连接到Mac的USB传感器读取环境数据。用户能够配置应用程序对数据进行采样的频率以及应用程序对这些样本进行平均并将平均值记录到文件中的频率。我第一次使用NSTimer但那非常不准确,尤其是当显示器进入休眠状态时。我现在正在使用DispatchSourceTimer,但它仍然大约每21-23秒损失1毫秒,大约每6小时左右损失1秒。我希望每天的时间少于1秒。我有什么想法可以让计时器更准确一点吗?funcsetupTimer()->DispatchSourceTimer{lettimer=DispatchSource.makeTimerSource(flags:.str

ios - 如何知道在 iOS 中何时完成并行 HTTP 请求?

我只需要在请求多个HTTP资源以收集一些数据后运行一些代码。我阅读了很多文档并且发现我应该使用GCD和调度组:使用dispatch_group_create()创建一个组对于每个请求:使用dispatch_group_enter()进入调度组运行请求收到回复后,使用dispatch_group_leave()离开群组等待dispatch_group_wait()使用dispatch_release()释放组但我不确定这种做法是否会存在一些缺陷——或者是否有更好的方法来等待并行请求完成?下面的代码看起来运行良好://Justsendarequestandcallthewhenfinish

ios - Swift 中的 HTTP 长轮询

我正在尝试使用iOS8+在Swift中实现一个长轮询解决方案。虽然该解决方案无疑有效并让主线程空闲用于UI交互,但内存使用量不断攀升,所以我显然做错了什么。我写的类如下:enumLongPollError:ErrorType{caseIncorrectlyFormattedUrlcaseHttpError}publicclassLongPollingRequest:NSObject{varGlobalUserInitiatedQueue:dispatch_queue_t{returndispatch_get_global_queue(Int(QOS_CLASS_USER_INITIAT

swift - 有没有办法从 Swift 3 中的异步闭包中抛出错误?

我正在使用DispatchQueue异步执行测试中的一些函数,如下所示:letqueue:DispatchQueue=DispatchQueue.global(qos:DispatchQoS.QoSClass.userInitiated)letgroup:DispatchGroup=DispatchGroup()funcexecute(argument:someArg)throws{group.enter()queue.async{do{//Dostuffheregroup.leave()}catch{Log.info(“Somethingwentwrong")}}group.wait

ios - 如何在授予位置权限后执行任务 ios

我正在尝试设置一个登机界面,要求用户提供一些权限,包括:位置、通知和相机。我设置了3个不同的ViewController,每个都要求获得其中一个权限并解释原因。在每个ViewController上,我在底部都有一个按钮,上面写着“授予权限”。当用户单击按钮时,我希望弹出权限对话框,一旦用户单击允许,我想转换到下一个ViewController。这是我现在拥有的:classOnboardingStep2:UIViewController{overridefuncviewDidLoad(){self.view.backgroundColor=StyleKit.orangeWhite()}@

ios - 为什么从后台线程更新 UI 需要这么长时间?

我了解所有UI更新都必须从主线程完成。但纯粹是为了更深入地了解GCD和dispatchmain是如何工作的:我有一个运行网络调用的按钮,我最终在它的completionHandler中做了:self.layer.borderColor=UIColor(red:255/255.0,green:59/255.0,blue:48/255.0,alpha:1.0).cgColorself.layer.borderWidth=3.0要发生颜色变化,需要6-7秒。显然,如果从主线程运行上面的代码,它会立即改变边框颜色。问题1即使我没有任何其他代码要运行,为什么UI更改不会立即从后台线程发生?还在等

swift - 解决 iOS Swift 中的数据争用

我有NetworkProvider,它会连续进行API调用,而且一旦我收到数据,我就会更新用户ID。同时我将从其他功能访问用户标识。这是数据竞争条件,有人可以帮助消除该条件。`classNetworkProvider{publicvaruserID:StringfuncobserveStateChange(){FIRAuth.auth()?.addStateDidChangeListener({(auth,authenticatedUser)inifletuser=authenticatedUser{userID=user.uid}}}funccurrentUserID()->Stri