block探究之数组

今天在写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

你可能感兴趣的:(block探究之数组)