美文网首页
Block系列一

Block系列一

作者: 好雨知时节浩宇 | 来源:发表于2018-04-03 10:44 被阅读33次

    前言:block虽然经常用,代码中也随处可见,但是不一定每个人都能够准确定义并使用,所以再看了一篇博客后,手痒 就顺手花几分钟也写了篇总结下,如有雷同,您就凑合着看😝。之后会从底层来总结下block的实现原理以及相关的问题。

    1、block作为变量

    定义:返回值类型 (^block名)(参数类型)= ^返回值类型(参数){};
    示例:

    UIImageView * (^testBlok)(UIImageView *) = ^UIImageView *(UIImageView *ima) {
            return [UIImageView new];
        };
    testBlok([UIImageView new]);
    

    2、block作为属性

    定义:@property (nonatomic,copy) 返回值类型(^block名)(参数类型)
    示例:

    @property (nonatomic, copy) UIImageView *(^testBlock)(UIImageView *);
    

    使用:

    self.testBlock = ^UIImageView *(UIImageView *aa) {
            return [UIImageView new];
        };
    

    3、block作为函数声明的形参

    定义:- (void) 函数名:(返回值类型 (^) (参数类型)) {
    }
    示例:

    - (void)testBlockWith:(UIImageView * (^)(UIImageView *imag) )testParamBlock {
        if(testParamBlock) {
            UIImageView *image = nil;
            UIImageView *resultImageView = testParamBlock(image);
        }
    }
    

    4、block作为函数实参

    定义:[函数名:^返回值类型 (参数) { … }];
    示例:

    [self testBlockWith:^UIImageView *(UIImageView *imag) {
           
    }]
    

    5、使用typedef来定义

    typedef 返回值类型(^block名)(参数类型);
    使用:block名 xxxx = ^返回值类型(参数){…}

    相关文章

      网友评论

          本文标题:Block系列一

          本文链接:https://www.haomeiwen.com/subject/ngbxhftx.html