我经常想在未来几个微秒内执行一些代码。现在,我这样解决它:
- (void)someMethod
{
// some code
}
还有这个:
[self performSelector:@selector(someMethod) withObject:nil afterDelay:0.1];
它是有效的,但我每次都必须创建一个新方法。有没有可能使用块来代替这个?基本上,我正在寻找一种方法,比如:
[self performBlock:^{
// some code
} afterDelay:0.1];
这对我来说真的很有用。
发布于 2010-10-24 11:38:23
没有内置的方法可以做到这一点,但通过一个类别添加也不是太糟糕:
@implementation NSObject (PerformBlockAfterDelay)
- (void)performBlock:(void (^)(void))block
afterDelay:(NSTimeInterval)delay
{
block = [[block copy] autorelease];
[self performSelector:@selector(fireBlockAfterDelay:)
withObject:block
afterDelay:delay];
}
- (void)fireBlockAfterDelay:(void (^)(void))block {
block();
}
@end
基本实现归功于Mike Ash。
发布于 2011-01-21 00:01:25
下面是我正在使用的一个基于GCD的简单技术:
void RunBlockAfterDelay(NSTimeInterval delay, void (^block)(void))
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
dispatch_get_current_queue(), block);
}
我不是GCD专家,我对这个解决方案很感兴趣。
发布于 2011-11-27 07:19:28
另一种方式(由于许多原因,这可能是最糟糕的方式)是:
[UIView animateWithDuration:0.0 delay:5.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
} completion:^(BOOL finished) {
//do stuff here
}];
https://stackoverflow.com/questions/4007023
复制相似问题