Block相关

bock常用写法:

1、无返回值 & 无参数

//定义blcok变量 无返回值
typedef void(^BlockA)(void);

//赋值
BlockA blockA = ^{
    NSLog(@"this is blockA");
};

//调用
blockA();

2、有返回值 & 无参数

//定义blcok变量 返回值为int类型,无参数
typedef int(^BlockB)(void);

//赋值
BlockB blockB = ^int {
    int count = 2;
    NSLog(@"this is blockB [%d]", count);
    return count;
};

//调用
blockB();

3、有返回值 & 有参数

//定义blcok变量 返回值为int类型, 参数为int类型
typedef int(^BlockC)(int);

//赋值
BlockC blockC = ^int (int count){
    NSLog(@"this is blockC [%d]", count);
    return count;
};

//调用
blockC(4);

4、

typedef void(^BlockD)(void);
typedef void(^BlockE)(int, NSString*);

- (void)testBlock:(BlockD)blockD blockE:(BlockE)blockE {
    blockD();
    blockE(2, @"abc");
}

[self testBlock:^{
    NSLog(@"---blockD-----");
} blockE:^(int count, NSString *string) {
    NSLog(@"blockE count is [%d],string is [%@]", count, string);
}];

block注意事项:
1、
变量访问,使用__block修饰符,可以对变量读写,否则只读。

2、
注意循环引用,使用__weak修饰符:

__weak __typeof(self)weakSelf = self;

blockF = ^{
    __strong __typeof(weakSelf)strongSelf = weakSelf;
    NSLog(@"self is [%@]", strongSelf);
};

blockF();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容