Answers:
performSelector:withObject:afterDelay:
您也可以使用一个块
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[object method];
});
大多数时候,您将要使用dispatch_get_main_queue,尽管如果该方法中没有UI,则可以使用global queue。
编辑:
Swift 3版本:
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
object.method()
}
同样,这DispatchQueue.global().asyncAfter(...
可能也是一个不错的选择。
dispatch_after
并按Enter
dispatch_after
,这确实是一种非常简单的方法,此外,您还可以将属性传递给所调用的方法,这很棒。
最好的方法是:
[self performSelector:@selector(YourFunctionName)
withObject:(can be Self or Object from other Classes)
afterDelay:(Time Of Delay)];
您还可以将nil作为withObject参数传递。
例如:
[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ];
在调用0.1秒延迟方法后,可以使用执行选择器来执行以下代码。
[self performSelector:@selector(InsertView) withObject:nil afterDelay:0.1];
你也可以:
[UIView animateWithDuration:1.0
animations:^{ self.view.alpha = 1.1; /* Some fake chages */ }
completion:^(BOOL finished)
{
NSLog(@"A second lapsed.");
}];
在这种情况下,您必须伪造对某些视图的某些更改才能获得动画效果。确实是骇人听闻的,但是我喜欢基于块的东西。或在下面总结@mcfedr答案。
waitFor(1.0, ^
{
NSLog(@"A second lapsed");
});
typedef void (^WaitCompletionBlock)();
void waitFor(NSTimeInterval duration, WaitCompletionBlock completion)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC),
dispatch_get_main_queue(), ^
{ completion(); });
}
斯威夫特2.x
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
print("do some work")
}
Swift 3.x-&-Swift 4
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
print("do some work")
}
或通过 escaping closure
func delay(seconds: Double, completion: @escaping()-> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + seconds, execute: completion)
}
在Swift 3中使用
perform(<Selector>, with: <object>, afterDelay: <Time in Seconds>)
注意:这将暂停您的整个线程,而不仅仅是一种方法。
在调用您的方法之前,先调用睡眠/等待/暂停1000 ms吗?
Sleep(1000); // does nothing the next 1000 mSek
Methodcall(params); // now do the real thing
编辑:上面的答案适用于一般问题“如何将方法调用延迟1秒钟?”,这是在回答时提出的问题(实际上答案是在原始问题的7分钟之内给出的:- ))。当时没有提供有关该语言的信息,因此请停止谈论使用XCode或缺少类的正确睡眠方式。