首页 > 代码库 > IOS block的一些用法例子

IOS block的一些用法例子

首先用一张图解释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:^{
    // 在主线程调用方法
}];




IOS block的一些用法例子