块而不是performSelector:withObject:afterDelay:[重复]

2024-03-24

我经常想在未来几微秒内执行一些代码。现在,我这样解决:

- (void)someMethod
{
    // some code
}

和这个:

[self performSelector:@selector(someMethod) withObject:nil afterDelay:0.1];

它有效,但我每次都必须创建一个新方法。是否可以使用块来代替这个?基本上我正在寻找类似的方法:

[self performBlock:^{
    // some code
} afterDelay:0.1];

这对我来说真的很有用。


没有内置的方法可以做到这一点,但通过类别添加也不错:

@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 http://www.mikeash.com/pyblog/friday-qa-2009-08-14-practical-blocks.html为基本实施。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

块而不是performSelector:withObject:afterDelay:[重复] 的相关文章

随机推荐