copy、mutableCopy和assignment有什么区别?
What are the differences between copy, mutableCopy and assignment?
我以为我明白copy和mutableCopy的区别了。但是今天我怀疑自己。还是没看懂
NSArray *arrayB = [NSArray arrayWithObject:@"a"];
NSArray *arrayA = [arrayB copy];
NSArray *arrayC = [arrayB mutableCopy];
NSArray *arrayD = arrayB;
当我对arrayA, arrayC 或arrayD 进行一些更改时,arrayB 是否会与更改后的arrayA, arrayC 和arrayD 中的一个有相同的更改?
您不能更改 arrayA、arrayB 或 arrayD,它们是不可变的(并且 arrayD 不是新实例,它指向与 arrayB 相同的对象)。您只能将这些指针设置为指向不同的数组。
如果您对 arrayC(这里唯一的可变实例)进行更改,那么不,以前从中复制的 arrayB 不会更改。
// Can't modify this NOW
NSArray *arrayB = [NSArray arrayWithObject:@"a"];
// Create another copy of Array B like XEROX. If you change in XEROX
// it does not reflect to original Copy
NSArray *arrayA = [arrayB copy];
// This is a mutable copy so you can make changes in this and you have
// to change NSArray to NSMutableArray here as it the mutable copy.
NSMutableArray *arrayC = [arrayB mutableCopy];
// Any change made in arrayD reflect to arrayB but arrayD is NSArray
// (immutable) so you can not make any changes in arrayD
NSArray *arrayD = arrayB;
希望这能帮助您解决问题。
我以为我明白copy和mutableCopy的区别了。但是今天我怀疑自己。还是没看懂
NSArray *arrayB = [NSArray arrayWithObject:@"a"];
NSArray *arrayA = [arrayB copy];
NSArray *arrayC = [arrayB mutableCopy];
NSArray *arrayD = arrayB;
当我对arrayA, arrayC 或arrayD 进行一些更改时,arrayB 是否会与更改后的arrayA, arrayC 和arrayD 中的一个有相同的更改?
您不能更改 arrayA、arrayB 或 arrayD,它们是不可变的(并且 arrayD 不是新实例,它指向与 arrayB 相同的对象)。您只能将这些指针设置为指向不同的数组。 如果您对 arrayC(这里唯一的可变实例)进行更改,那么不,以前从中复制的 arrayB 不会更改。
// Can't modify this NOW
NSArray *arrayB = [NSArray arrayWithObject:@"a"];
// Create another copy of Array B like XEROX. If you change in XEROX
// it does not reflect to original Copy
NSArray *arrayA = [arrayB copy];
// This is a mutable copy so you can make changes in this and you have
// to change NSArray to NSMutableArray here as it the mutable copy.
NSMutableArray *arrayC = [arrayB mutableCopy];
// Any change made in arrayD reflect to arrayB but arrayD is NSArray
// (immutable) so you can not make any changes in arrayD
NSArray *arrayD = arrayB;
希望这能帮助您解决问题。