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();

你可能感兴趣的:(Block相关)