关于 copy,mutableCopy的一点总结
2020-01-22 本文已影响0人
hui8685291
不管是集合类对象(NSArray,NSDictionary,NSSet...),还是非集合类对象(NSString),接收到copy或者mutableCopy消息时,都需遵循以下准则:
copy 返回的都是不可变对象
所以如果对 copy 返回值去调用可变对象的接口就会 crash。
mutableCopy 返回的都是可变对象
所以在 - (void)testCash 方法中执行到 self.copAry = arr; ARC 环境下setter 方法执行了 copy 方法,导致原本 NSMutableArray类型数组变成 NSArray 类型,在调用removeObject:方法时,自然会出现这个错误reason: '-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x6000000487c0'