标签: grand-central-dispatch

如何在延迟后触发一个块,比如-performSelector:withObject:afterDelay:?

有没有办法在延迟后调用带有原始参数的块,比如使用performSelector:withObject:afterDelay:但是使用像int/ double/ 这样的参数float

objective-c grand-central-dispatch ios objective-c-blocks

725
推荐指数
14
解决办法
33万
查看次数

dispatch_after - Swift中的GCD?

我从Apple那里浏览了iBook,找不到任何定义:

有人可以解释结构dispatch_after吗?

dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch ios swift

548
推荐指数
12
解决办法
24万
查看次数

NSOperation vs Grand Central Dispatch

我正在学习iOS的并发编程.到目前为止,我已经读过NSOperation/NSOperationQueueGCD.使用NSOperationQueueover 的原因是什么GCD,反之亦然?

听起来像是两者,GCD并从用户那里NSOperationQueue抽象出明确的创造NSThreads.然而这两种方法之间的关系对我来说并不清楚,所以任何反馈都要赞赏!

concurrency nsoperation nsoperationqueue grand-central-dispatch ios

454
推荐指数
7
解决办法
11万
查看次数

如何在Swift 3和4中编写dispatch_after GCD?

在Swift 2中,我能够dispatch_after使用大中央调度来延迟一个动作:

var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
    // your function here 
})
Run Code Online (Sandbox Code Playgroud)

但这似乎不再在Swift 3(或4)中编译.在Swift 3中使用新的Dispatch API编写它的首选方法是什么?

grand-central-dispatch ios swift swift4 swift5

436
推荐指数
6
解决办法
20万
查看次数

如何在Swift 3中创建调度队列

在Swift 2中,我能够使用以下代码创建队列:

let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT)
Run Code Online (Sandbox Code Playgroud)

但这不能在Swift 3中编译.

在Swift 3中写这个的首选方法是什么?

grand-central-dispatch ios swift3 xcode8 dispatch-after

393
推荐指数
6
解决办法
32万
查看次数

在Objective C中使用GCD的dispatch_once创建单例

如果您可以定位iOS 4.0或更高版本

使用GCD,它是在Objective C(线程安全)中创建单例的最佳方法吗?

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)

singleton objective-c grand-central-dispatch ios

341
推荐指数
5
解决办法
9万
查看次数

如何在Swift 3,Swift 4及更高版本中dispatch_sync,dispatch_async,dispatch_after等?

我在Swift 2.x(甚至1.x)项目中有很多代码,如下所示:

// Move to a background thread to do some long running work
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let image = self.loadOrGenerateAnImage()
    // Bounce back to the main thread to update the UI
    dispatch_async(dispatch_get_main_queue()) {
        self.imageView.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

或者像这样的东西来延迟执行:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
    print("test")
}
Run Code Online (Sandbox Code Playgroud)

或者Grand Central Dispatch API的各种其他用途......

现在我已经在Swift 3的Xcode 8(beta)中打开了我的项目,我得到了各种各样的错误.其中一些提供修复我的代码,但并非所有修复产生工作代码.我该怎么办?

libdispatch grand-central-dispatch dispatch-async swift swift3

230
推荐指数
6
解决办法
18万
查看次数

GCD在主线程中执行任务

我有一个可能来自任何线程的回调.当我得到这个回调,然后我想在主线程上执行某个任务.

我是否需要检查我是否已经在主线程上 - 或者是否因为没有执行此检查而遭受任何惩罚?请调用下面的代码?

dispatch_async(dispatch_get_main_queue(), ^{
   // do work here
});
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch

228
推荐指数
3
解决办法
11万
查看次数

在Swift中如何在GCD主线程上调用带参数的方法?

在我的应用程序中,我有一个函数,它生成NSRURLSession并使用发送NSURLRequest

sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)
Run Code Online (Sandbox Code Playgroud)

在这个任务的完成块中,我需要做一些计算,将UIImage添加到调用viewcontroller.我有一个叫做的功能

func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)
Run Code Online (Sandbox Code Playgroud)

这是UIImage添加计算.如果我尝试在完成块内运行视图添加代码,Xcode会抛出一个错误,说我在后台进程中无法使用布局引擎.所以我在SO上发现了一些试图在主线程上排队方法的代码:

let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_MSEC)))
                    dispatch_after(time, dispatch_get_main_queue(), {
                        let returned = UIApplication.sharedApplication().sendAction("displayQRCode:", to: self.delegate, from: self, forEvent: nil)
                        })
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何将参数"receiveAddr"和"amountBTC"添加到此函数调用中.我该怎么做,或者有人可以建议一种方法调用添加到应用程序主队列的最佳方法吗?

parameters grand-central-dispatch swift

184
推荐指数
6
解决办法
16万
查看次数

在启动另一个块之前等待直到执行两个异步块

使用GCD时,我们希望等到两个异步块执行完成后再继续执行下一步.最好的方法是什么?

我们尝试了以下方法,但它似乎不起作用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block1
});


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block2
});

// wait until both the block1 and block2 are done before start block3
// how to do that?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block3
});
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch ios objective-c-blocks

182
推荐指数
5
解决办法
11万
查看次数