题目
@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
嗯,这点要分清
小编辑器
小而巧

本文分析了Objective-C中@property(copy)修饰符应用于NSMutableArray时引发的崩溃原因。当使用copy属性设置NSMutableArray时,实际创建了一个不可变的NSArray副本,导致后续尝试修改数组的操作失败。此问题强调了理解属性修饰符与方法的区别,特别是对于可变集合对象,应使用mutableCopy而非copy。

1040

被折叠的 条评论
为什么被折叠?



