1. ホーム
  2. iphone

[解決済み] performSelector:withObject:afterDelayの代わりにブロックを使う。重複

2023-05-06 23:30:33

質問

私はよく数マイクロ秒先のコードを実行したいことがあります。今は、こんな感じで解決しています。

- (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

クレジット マイク・アッシュ に感謝します。