1

我有一个需要几个参数的方法,我需要延迟该方法的一部分。我不想将它分成几个方法并使用[self performSelectorAfterDelay],因为延迟需要该方法中已经存在的参数。我需要类似以下的东西

-(void)someMethod{
.....

delay {

     more code but not a separate self method
}
... finish method
}
4

2 回答 2

3

dispatch_after功能似乎符合您的需求:

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) {
    // this code is going to be executed, on the main queue (or thread) after 2.0 seconds.
});

当然,时间是可配置的,刚开始读起来有点混乱,但是一旦你习惯了块如何与objective-c代码一起工作,你应该可以开始了。

一个警告:

从来没有,从来没有,从来没有!使用 .阻止 iPhone 应用程序的主线程sleep()。只是不要这样做!

于 2012-10-29T16:45:51.053 回答
1

看起来有点矫枉过正。

-(void)someMethod{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        NSLog(@"Start code");
        dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
        dispatch_sync(backgroundQueue, ^{

            sleep(5);
            // delayed code
            NSLog(@"Delayed code");
        });

        dispatch_sync(backgroundQueue, ^{

            // finishing code
            NSLog(@"Finishing code");
        });
    });

}

backgroundQueue可能是外部调度呼叫的用户。不过看起来真的很糟糕:)

于 2012-10-29T16:37:27.330 回答