在目标C中的单独线程上延迟方法

Tuk*_*ajo 2 objective-c delay nonblocking

有没有办法在更改用户默认值中的键值之前延迟方法调用?

例如; 我有方法A,它是IBAction方法B.如果键"keyOne"是假的; 方法A通过-[NSUserDefaults setBool: forKey:]然后将"keyOne"设置为true ,然后使用整数输入调用方法B进行时间延迟.然后,方法B需要等待输入的延迟是几秒钟,然后使用相同的NSUserDefaults将"keyOne"更改回true.

Mic*_*lum 9

使用GCDdispatch_after()延迟操作.但是,不是使用由Xcode代码片段生成的主队列,而是创建自己的队列,或者使用后台队列.

dispatch_queue_t myQueue = dispatch_queue_create("com.my.cool.new.queue", DISPATCH_QUEUE_SERIAL);

double delayInSeconds = 10.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, myQueue, ^(void){

    // Reset stuff here (this happens on a non-main thead)
    dispatch_async(dispatch_get_main_queue(), ^{
        // Make UI updates here. (UI updates must be done on the main thread)
    });
});
Run Code Online (Sandbox Code Playgroud)

你可以在这篇文章中找到有关使用performSelector:dispatch_after()答案之间区别的更多信息:performSelector:withObject:afterDelay:和dispatch_after之间的权衡是什么?