我如何推迟1秒的方法调用?

有没有简单的方法延迟1秒的方法调用?

我有一个UIImageView对触摸事件作出反应。 当检测到触摸时,应用程序中会发生一些animation。 一秒钟后,我想打电话给另一种方法。 在这种情况下,我不能使用animationDidStopselect器。

 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类别。