草庐IT

grand-central-dispatch

全部标签

iphone - iOS 应用程序的操作队列与调度队列

OperationQueue和DispatchQueue有什么区别?分别在什么情况下使用更合适? 最佳答案 OperationQueue在内部使用GrandCentralDispatch和iOS。OperationQueue让您可以更好地控制操作的执行方式。例如,您可以定义各个操作之间的依赖关系,这对于普通的GCD队列是不可能的。也可以取消已在OperationQueue中排队的操作(只要操作支持它)。当你在GCD调度队列中加入一个block时,它肯定会在某个时候被执行。总结一下,OperationQueue可以更适合可能需要取消或

ios - 无法访问 dispatch_async : "Variable is not Assignable (missing _block type specifier)" 中的全局变量

这个问题在这里已经有了答案:AssignavariableinsideaBlocktoavariableoutsideaBlock(8个回答)关闭9年前。在我的dispach_async代码block中,我无法访问全局变量。我收到此错误VariableisnotAssignable(missing_blocktypespecifier)。NSString*textString;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,(unsignedlong)NULL),^(void){textS

ios - 无法访问 dispatch_async : "Variable is not Assignable (missing _block type specifier)" 中的全局变量

这个问题在这里已经有了答案:AssignavariableinsideaBlocktoavariableoutsideaBlock(8个回答)关闭9年前。在我的dispach_async代码block中,我无法访问全局变量。我收到此错误VariableisnotAssignable(missing_blocktypespecifier)。NSString*textString;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,(unsignedlong)NULL),^(void){textS

objective-c - iOS 6 中用于完成 block 的 dispatch_get_current_queue() 的替代方案?

我有一个接受block和完成block的方法。第一个block应该在后台运行,而完成block应该在调用该方法的任何队列中运行。对于后者,我总是使用dispatch_get_current_queue(),但它似乎在iOS6或更高版本中已被弃用。我应该改用什么? 最佳答案 “在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可能是低优先级队列、主队列或其他具有奇怪属性的队列。我最喜欢的方法是说“完成block在具有以下属性的实现定义的队列上运行:x、y、z”,如果调用者想要更多控制权,则让block分派(di

objective-c - iOS 6 中用于完成 block 的 dispatch_get_current_queue() 的替代方案?

我有一个接受block和完成block的方法。第一个block应该在后台运行,而完成block应该在调用该方法的任何队列中运行。对于后者,我总是使用dispatch_get_current_queue(),但它似乎在iOS6或更高版本中已被弃用。我应该改用什么? 最佳答案 “在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可能是低优先级队列、主队列或其他具有奇怪属性的队列。我最喜欢的方法是说“完成block在具有以下属性的实现定义的队列上运行:x、y、z”,如果调用者想要更多控制权,则让block分派(di

ios - 等到两个异步 block 被执行后再开始另一个 block

在使用GCD时,我们希望等到两个异步block执行完毕后再继续执行下一步。最好的方法是什么?我们尝试了以下方法,但似乎不起作用:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{//block1});dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{//block2});//waituntilboththeblock1andblock2aredonebeforestartblock3//h

ios - 等到两个异步 block 被执行后再开始另一个 block

在使用GCD时,我们希望等到两个异步block执行完毕后再继续执行下一步。最好的方法是什么?我们尝试了以下方法,但似乎不起作用:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{//block1});dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{//block2});//waituntilboththeblock1andblock2aredonebeforestartblock3//h

objective-c - GCD 在主线程中执行任务

我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。我是否需要检查我是否已经在主线程上-或者在调用下面的代码之前不执行此检查是否会受到任何惩罚?dispatch_async(dispatch_get_main_queue(),^{//doworkhere}); 最佳答案 不,你不需要检查你是否已经在主线程上。通过将block分派(dispatch)到主队列,您只是将block安排在主线程上串行执行,这发生在相应的运行循环运行时。如果你已经在主线程上,行为是一样的:block被调度,在主线程的runloop

objective-c - GCD 在主线程中执行任务

我有一个可能来自任何线程的回调。当我得到这个回调时,我想在主线程上执行某个任务。我是否需要检查我是否已经在主线程上-或者在调用下面的代码之前不执行此检查是否会受到任何惩罚?dispatch_async(dispatch_get_main_queue(),^{//doworkhere}); 最佳答案 不,你不需要检查你是否已经在主线程上。通过将block分派(dispatch)到主队列,您只是将block安排在主线程上串行执行,这发生在相应的运行循环运行时。如果你已经在主线程上,行为是一样的:block被调度,在主线程的runloop

objective-c - 了解 dispatch_async

我对这段代码有疑问dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{NSData*data=[NSDatadataWithContentsOfURL:kLatestKivaLoansURL];[selfperformSelectorOnMainThread:@selector(fetchedData:)withObject:datawaitUntilDone:YES];});这段代码的第一个参数是dispatch_get_global_queue(DISPATCH_QUEUE_PR