6

コードのブロックを「開始」してから 2 秒後に実行しようとしています。

NSTimer はこれを実行できると思いますが、理解できません。

4

4 に答える 4

19

NSTimer を使用することもできますが、別のオプションとしてperformSelector:withObject:afterDelayを使用することもできます。 基本的には後で発生するメソッド呼び出し (メッセージ送信) のようなものです。

この例では、遅延後に doStuff: メッセージを送信します。

[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];

これにより、このメソッドが 2.0 秒後に呼び出されます。

-(void)doStuff:(id)sender 
{
    /// do something
}
于 2010-05-06T22:24:13.923 に答える
12

以下は、必要なことを行います。

 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2 
                                   target:self 
                                   selector:@selector(handleTimer:) 
                                   userInfo:nil
                                   repeats:NO];

次にデリゲート関数:

-(void)handleTimer: (NSTimer *) timer 
{       
   //code
}
于 2010-05-06T22:01:54.473 に答える
8

いくつかの便利なコードを使用することもできます:

NSObject+PerformBlock.h

@interface NSObject (PerformBlock)

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait;
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay;
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval;

@end

NSObject+PerformBlock.m

@interface NSObject (PerformBlockHidden)

- (void)performBlock:(void(^)(void))block;

@end

@implementation NSObject (PerformBlock)

- (void)performBlock:(void(^)(void))block {
    block();
}

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait {
    [self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait];
}

- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay {
    [self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay];
}

- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval {
    for (NSInteger repetition = 0; repetition < repeatCount; repetition++)
        [self performBlock:block afterDelay:(repetition*timeInterval)];
}

@end

次に、NSObject+PerformBlock.h をインポートして呼び出します。

[myObject performBlock:^{
    // Code you want to perform after 2secs
} afterDelay:2];
于 2011-07-20T03:30:34.090 に答える
2

を 2.0 秒に設定できるはずでNSTimeInterval、その時間後に起動するはずです。あなたは何を見ていますか?タイマーを呼び出すために使用しているコードは何ですか?

于 2010-05-06T22:00:14.787 に答える