使用延迟参数在 objective-c 中创建方法

Creating a method in objective-c with a delay argument

我试图在 objective-c 中创建一个带有参数的方法,该参数是实际方法开始前的秒数。

我试图避免使用 [self performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval)]; 因为在我的方法中有延迟实际上会节省我大量的编码,因为我计划向这个方法添加其他参数。

方法示例:

-(void) startMethodAfterArgumentDelay: (NSTimeInterval *)delay{
     NSLog(@"perform action after argument delay");
}

以及如何称呼它:

[self startMethodAfterArgumentDelay:3.0f];

如有任何帮助,我们将不胜感激!

您可以使用 BlocksKit 然后编写如下代码:

[self bk_performBlock:^(id obj) {
    //code
} afterDelay:delay];

如果您不想像其他答案建议的那样使用任何第 3 方库,这很容易使用 GCD dispatch_after() 自己实现。请注意,此方法是异步的,因此即使块的内容被延迟,您的方法也会立即return。

- (void)startMethodAfterArgumentDelay:(NSTimeInterval)delay
{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"perform action after argument delay");
    });
}

只需将 delay 喂给 dispatch_after

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
    // do whatever
});