我如何推迟1秒的方法调用?
有没有简单的方法延迟1秒的方法调用?
我有一个UIImageView
对触摸事件作出反应。 当检测到触摸时,应用程序中会发生一些animation。 一秒钟后,我想打电话给另一种方法。 在这种情况下,我不能使用animationDidStop
select器。
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,你可以使用全局队列 。
编辑:
Swift 3版本:
DispatchQueue.main.asyncAfter(deadline: .now() + 1) { object.method() }
同样, DispatchQueue.global().asyncAfter(...
也可能是一个不错的select。
最好的办法是:
[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 ];
已经有很多答案,他们都是正确的。 如果你想使用dispatch_after
你应该查找Code Snippet Library
右侧底部的Code Snippet Library
(在这里你可以selectUI
元素)。
所以你只需要通过在代码中写入调度来调用这个代码片段:
您可以使用执行select器在延迟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."); }];
这种情况下,你必须假设一些视图的一些变化,以获得animation的工作。 这确实是hacky,但我喜欢基于块的东西。 或者在下面结束@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(); }); }
你可以这样做
[self performSelector:@selector(MethodToExecute) withObject:nil afterDelay:1.0 ];
Swift 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") }
从检查的解决scheme中有一个Swift 3解决scheme:
self.perform(#selector(self.targetMethod), with: self, afterDelay: 1.0)
还有方法
@objc fileprivate func targetMethod(){ }
在Swift中使用3
perform(<Selector>, with: <object>, afterDelay: <Time in Seconds>)
注意:这将暂停你的整个线程,而不仅仅是一个方法。
打电话睡觉/等待/暂停1000毫秒之前调用您的方法?
Sleep(1000); // does nothing the next 1000 mSek Methodcall(params); // now do the real thing
编辑:上面的答案适用于一般问题“我怎样才能延迟1秒的方法调用?”,这是答案时问的问题(事实上答案是在原始问题的7分钟内给出的: – ))。 当时没有提供有关该语言的信息,所以请停止使用睡眠的正确方法,即XCode和缺less类别。