延迟后执行方法不使用 NSThread 或 sleep() - 还有其他选择吗?
Posted
技术标签:
【中文标题】延迟后执行方法不使用 NSThread 或 sleep() - 还有其他选择吗?【英文标题】:execute method after delay not using NSThread or sleep() - is there another option? 【发布时间】:2011-07-12 14:06:10 【问题描述】:ios4 中是否有办法在延迟后使用 NSThread 以外的其他方法调用方法或使用 sleep() 阻塞 UI?
【问题讨论】:
【参考方案1】: double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
// code to be executed on main thread.If you want to run in another thread, create other queue
);
【讨论】:
这正是我要找的东西,我几周前偶然发现了它,但又找不到它!!! 在 Xcode 中键入 dispatch_a 并按 ESC,自动完成将使用此代码启动:D 美人。感谢您提供这个简单(且有效)的示例)。赞成!【参考方案2】:- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
NSObject
会为你做这件事。
此外,您可以创建一个NSTimer
并让它在给定时间后对某个目标和选择器执行回调。
【讨论】:
【参考方案3】:您可以使用NSTimer。 (例如timerWithTimeInterval:target:selector:userInfo:repeats
)
【讨论】:
如果您重视必须取消方法的调用,我会说这是最好的,因为您可以保留 NSTimer 并按需失效。【参考方案4】:[self performSelector:@selector(methodName) withObject:nil afterDelay:2.0];
【讨论】:
【参考方案5】:[NSTimer scheduledTimerWithTimeInterval:1.0 target:self
selector:@selector(aMethod:) userInfo:nil repeats:NO];
- (void) aMethod:(NSTimer *) aTimer
//task to do after the delay.
【讨论】:
定时器方法应该有一个参数;计时器在触发时自行进入:- (void) aMethod: (NSTimer *)tim;
没有它也能正常工作。但是 API 文档建议发送 timer 参数。谢谢。【参考方案6】:
您可以通过以下方式轻松做到这一点:
[self performSelector:@selector(methodName) withObject:nil afterDelay:5];
【讨论】:
以上是关于延迟后执行方法不使用 NSThread 或 sleep() - 还有其他选择吗?的主要内容,如果未能解决你的问题,请参考以下文章