今天在写block的时候,发现,在内部修改可变数组的时候,是不需要添加任何修饰的。如下:
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:@"1"];
void(^block)(void) = ^{
[arr addObject:@"2"];
NSLog(@"%@",arr);
};
block();
但是,在修改不可变数组(NSArray)是必须添加__block的。
__block NSArray *arr1 = [NSArray array];
arr1 = @[@"cc"];
void(^block)(void) = ^{
arr1 = @[@"cvv"];
NSLog(@"%@",arr1);
};
block();
如果不写,编译器是直接报错了。
__block对不可变数组做修改时进行了深拷贝。可变数组本来就是可以改变的。
block 经典题目:https://juejin.cn/post/6844904041474949133
网友评论