有没有办法在更改用户默认值中的键值之前延迟方法调用?
例如;我有方法A,它是一个IBAction
和方法B.如果一个键“keyOne”是假的;方法A通过-[NSUserDefaults setBool: forKey:]
将“keyOne”设置为true,然后使用整数输入调用方法B进行时间延迟。然后,方法B需要等待输入的延迟是几秒钟,然后使用相同的NSUserDefaults将“keyOne”更改回true。
答案 0 :(得分:9)
使用GCD的dispatch_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)
});
});
您可以在此帖中的答案中找到有关使用performSelector:
和dispatch_after()
之间区别的更多信息:What are the tradeoffs between performSelector:withObject:afterDelay: and dispatch_after
答案 1 :(得分:3)
您可以使用方法A中的执行选择器来调用方法B:
[self performSelector:@selector(methodName) withObject:nil afterDelay:1.0];
如果你的方法B需要知道延迟,你可以使用withObject:来传递参数,它需要是NSNumber,而不是整数。