Blocksで受け取った処理をNSTimerのスケジュール内で実行する

| コメント(0) | トラックバック(0)
Blocksで受け取った処理をNSTimerのscheduledTimerWithTimeIntervalで遅延実行させる方法です。
例えば同期読み込み時は即Blocksを実行し、非同期読み込み時にはNSTimerで読み込みを監視した後にBlocksを実行したいといったケースで役立つかもしれません。

typedef void (^CallbackHandler)();


@interface ViewController ()

{

NSTimer* _blockTimer;

}


- (void)blockTest:(CallbackHandler)handler;


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

[self blockTest:^(void) {

NSLog(@"Block処理実行");

}];

}


- (void)blockTest:(CallbackHandler)handler

{

NSLog(@"blockTest 開始");

_blockTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:[NSBlockOperation blockOperationWithBlock:^(void) {

static NSInteger count = 0;

count++;

NSLog(@"%d", count);

if (count > 10) {

[_blockTimer invalidate];

_blockTimer = nil;

if (handler) handler();

}

}] selector:@selector(main) userInfo:nil repeats:YES];

}


@end


トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/73

コメントする

Twitterボタン
Twitterブログパーツ