首先用一张图解释block的结构:
按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(5); // result是 35
例子1:利用block延迟方法的执行
/** * 在主线程中延迟调用方法 * * @param block 方法主体block块 * @param delay 延迟delay秒 */ - (void)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay { int64_t delta = (int64_t)(1.0e9 * delay); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delta), dispatch_get_main_queue(), block); }
调用方法:
[self performBlock:^{ // 主线程中处理的事件 } afterDelay:0.5];
例子二:强制在主线程中调用方法:
/** * 强制在主线程中调用方法 * * @param block 方法主体block块 */ - (void)runOnMainQueueWithBlock:(void (^)(void))block{ if(dispatch_get_current_queue() == dispatch_get_main_queue()) { block(); } else { dispatch_sync(dispatch_get_main_queue(), block); } }
调用方法:
[self runOnMainQueueWithBlock:^{ // 在主线程调用方法 }];
时间: 2024-08-13 01:55:17