草庐IT

grand-central-dispatch

全部标签

objective-c - 在异步派发给它之前是否需要检查当前线程是否是主线程?

真的有必要在异步派发之前检查当前线程是否是主线程吗?在性能或其他方面有什么优势吗?我知道从同一个队列同步调度会导致死锁。但是我真的需要像下面代码段中的人那样检查当前线程吗?+(void)dispatchOnMainThread:(void(^)(void))task{if([NSThreadisMainThread])//Isthisnecessary?{task();}else{dispatch_async(dispatch_get_main_queue(),task);}} 最佳答案 Butdoireallyneedtochec

iOS 在 dispatch_async 中调用 animateWithDuration

我调用了一个网络API来获取结果。收到响应后,我想使用动画功能删除带有指示的“visualIndicatorView”(UIView)。Indication和View进入隐藏状态但不顺利。这是我的代码:dispatch_async(dispatch_get_main_queue()){UIView.animateWithDuration(2.0,animations:{()->Voidinself.activityIndicator.hidden=trueself.visualIndicatorView.hidden=trueself.activityIndicator.stopAni

ios - 调用 .cancel() 时 DispatchWorkItem 不终止函数

我在主函数runTask()中调用的函数列表中使用Alamofire按顺序发出了一系列HTTP请求,我希望能够停止这些请求。因此,我为每个需要运行的任务在DispatchWorkItem中设置了runTask()函数调用,并将工作项存储在数组中,如下所示:taskWorkItems.append(DispatchWorkItem{[weakself]inconcurrentQueue!.async{runTask(task:task)}})然后,我迭代工作项数组并调用perform()函数,如下所示:forworkItemintaskWorkItems{workItem.perform

ios - swift 中后台队列的性能?

跟进我的问题here.我有一个方法lotsOfWork()可能需要一些时间才能完成。当它运行时,用户需要等待它完成。我想向用户提供反馈,以便他(她)看到发生了什么。我现在有以下代码来运行我的lotsOfWork()方法,同时允许它更新显示其进度的标签:importUIKitclassViewController:UIViewController{@IBOutletweakvarlabel:UILabel!overridefuncviewDidAppear(_animated:Bool){super.viewDidAppear(animated)DispatchQueue.global(

swift - 在分派(dispatch)异步中包装完成处理程序的语法

我有一个需要分配给属性的完成处理程序,但我希望它异步执行。如果我没有那个要求,我会写:request.completionBlock=completionBlock但是既然有这个需求,我就得这样写request.completionBlock={response,errorinDispatchQueue.main.async{completionBlock(response,error)}}这似乎是多余的和不敏捷的。有没有更简单的语法?我想写类似的东西request.completionBlock=completionBlock.map(DispatchQueue.main.async

swift - 我应该使用未命名的 Timer 还是 Dispatch asyncAfter 来延迟 1 次?

我可以通过两种方式延迟某些事情(也许还有更多方式):funcdelay(delay:Double,closure:@escaping()->()){DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()+Double(Int64(delay*Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC),execute:closure)}//way1:delay(delay:1.0,closure:{})//way2:_=Timer.scheduledTimer(withTimeInterval:1.0

swift - 如何在 Swift 中为 `dispatch_function_t` 声明 `dispatch_async_f`?

Xcode7beta5。我正在尝试使用dispatch_async_f来避免阻塞。funcmyFirstFunc(){letidentifier=QOS_CLASS_BACKGROUNDletqueue=dispatch_get_global_queue(identifier,0)letcontext:UnsafeMutablePointer=nilletwork:dispatch_function_t=myOtherFuncdispatch_async_f(queue,context,work)}funcmyOtherFunc(context:UnsafeMutablePointer

ios - 即使已取消并设置为Nil,Swift iOS -DispatchWorkItem仍在运行

我使用GCD的DispatchWorkItem跟踪正在发送到Firebase的数据。我要做的第一件事是声明DispatchWorkItem类型的2个类属性,然后当我准备将数据发送到firebase时,我使用值对其进行初始化。第一个属性名为errorTask。初始化后,将其cancels设置为firebaseTask,然后将其设置为nil,然后显示“errorTaskfired”。它具有一个DispatchAsyncTimer,如果在此之前未取消errorTask,它将在0.0000000001秒内调用它。第二个属性名为firebaseTask。初始化后,它包含一个将数据发送到Fireb

swift - 快速的大中央调度(GCD)

我熟悉在Android中使用AsyncTask:创建一个子类,在子类的实例上调用execute,然后在UI线程或主线程上调用onPostExecute。swift中的等价物是什么? 最佳答案 这解决了我在Swift中的大部分异步需求:publicfuncbackground(function:@escaping()->Void){DispatchQueue.global().async(execute:function)}publicfuncmain(function:@escaping()->Void){DispatchQueue

ios - Swift 3 中的 DISPATCH_QUEUE_T

这个问题在这里已经有了答案:HowtocreatedispatchqueueinSwift3(15个答案)关闭6年前。我正在编写我的第一个Swift3,但我遇到了以下错误dispatch_queue_t在swift中不可用。varqueue:dispatch_queue_t?vardebugPrint=falsepublicinit(){letuuid=NSUUID().uuidStringletqueueLabel="tomlogger-queue-"+uuidqueue=dispatch_queue_create(queueLabel,DISPATCH_QUEUE_SERIAL)}