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 に答える