コードのブロックを「開始」してから 2 秒後に実行しようとしています。
NSTimer はこれを実行できると思いますが、理解できません。
NSTimer を使用することもできますが、別のオプションとしてperformSelector:withObject:afterDelayを使用することもできます。 基本的には後で発生するメソッド呼び出し (メッセージ送信) のようなものです。
この例では、遅延後に doStuff: メッセージを送信します。
[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];
これにより、このメソッドが 2.0 秒後に呼び出されます。
-(void)doStuff:(id)sender
{
/// do something
}
以下は、必要なことを行います。
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:NO];
次にデリゲート関数:
-(void)handleTimer: (NSTimer *) timer
{
//code
}
いくつかの便利なコードを使用することもできます:
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];
を 2.0 秒に設定できるはずでNSTimeInterval
、その時間後に起動するはずです。あなたは何を見ていますか?タイマーを呼び出すために使用しているコードは何ですか?