首先用一张图解释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:^{
// 在主线程调用方法
}];
原文地址:http://blog.csdn.net/dengbin9009/article/details/41348579