📚Effective OC - Tip39,40 用 block 来降低代码分散程度, 避免出现循环引用

着重说一下 block 的应用场景,为什么大家都愿意用 block :

  • 直观,简洁,可以方便的在一个场景里面使用,并可以捕获当前的变量。
//case 1可以声明不同语义
//.h
typedef void(^CompletesBlock)(int status);
typedef void(^ErrorBlock)(int status);
typedef void(^FailedBlock)(int status);
typedef void(^ProgressBlock)(int status);
- (void)doSomething:(CompletesBlock)completeBlock failed:(FailedBlock)failedBlock;
//.m 
- (void)doSomething:(CompletesBlock)completeBlock failed:(FailedBlock)failedBlock {
    if (completeBlock){
        completeBlock(1);
        completeBlock = nil;
    }
    if (failedBlock) {
        failedBlock(0);
        failedBlock = nil;
    }
}
//调用
    BlockHandler *handler = [BlockHandler new];
    //case 1
    [handler doSomething:^(int status) {
                NSLog(@"handler success %@", @(status));
                    }failed:^(int status) {
                      NSLog(@"handler failed %@", @(status));
                 }];

        //case 2
    handler.completeBlock = ^(int status) {
        NSLog(@"handler success 2");
    };
    handler.failedBlock = ^(int status) {
        NSLog(@"handler failed 2");
    };
    [handler innerDoSomething];
  • 可以指定调用的Queue
//.m
- (void)addBlock:(NSOperationQueue *)queue block:(void (^)(int))block {
    [queue addOperationWithBlock:^{
        if (block) {
            block(1);
        }
    }];
}

//调用
NSOperationQueue *queue = [NSOperationQueue mainQueue];
[handler addBlock:queue block:^(int i) {
    NSLog(@"add block on queue %@", @(i));
}];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容