题目
@property (nonatomic, copy) NSMutableArray *array;
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1", @"2", nil];
self.array = array;
[self.array addObject:@"3"];
NSLog(@"array = %@", array);
NSLog(@"self.array = %@", self.array);
分析
copy
修饰符,会在 setter 方法内,对传入的参数进入拷贝,生成一份新内存,然后赋值。
这点想到了,还有印象。
但是,最终结果是:崩溃!
没有输出。
崩溃日志:
-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x600003cd0780
self.array 变成了一个不可变数组 😭
因为 copy
后的 array,成了不可变的,虽然传入的参数 array 是可变的,但是新的 array 是不可变
这一点没想到
属性修饰符只有 copy
,没有 mutableCopy
方法才有 mutableCopy
嗯,这点要分清
小编辑器
小而巧