2014年5月アーカイブ

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