gpt4 book ai didi

cocoa - copy 和 mutableCopy 如何应用于 NSArray 和 NSMutableArray?

转载 作者:行者123 更新时间:2023-12-03 16:00:18 30 4
gpt4 key购买 nike

NSArrayNSMutableArray 上使用时,copymutableCopy 有什么区别?

这是我的理解;这是正确的吗?

// ** NSArray **
NSArray *myArray_imu = [NSArray arrayWithObjects:@"abc", @"def", nil];

// No copy, increments retain count, result is immutable
NSArray *myArray_imuCopy = [myArray_imu copy];

// Copys object, result is mutable
NSArray *myArray_imuMuta = [myArray_imu mutableCopy];

// Both must be released later
<小时/>
// ** NSMutableArray **
NSMutableArray *myArray_mut = [NSMutableArray arrayWithObjects:@"A", @"B", nil];

// Copys object, result is immutable
NSMutableArray *myArray_mutCopy = [myArray_mut copy];

// Copys object, result is mutable
NSMutableArray *myArray_mutMuta = [myArray_mut mutableCopy];

// Both must be released later

最佳答案

copymutableCopy 在不同的协议(protocol)中定义(分别为 NSCopyingNSMutableCopying),并且 NSArray 符合两者。 mutableCopy 是为 NSArray(不仅仅是 NSMutableArray)定义的,它允许您为原始不可变数组创建可变副本:

// create an immutable array
NSArray *arr = [NSArray arrayWithObjects: @"one", @"two", @"three", nil ];

// create a mutable copy, and mutate it
NSMutableArray *mut = [arr mutableCopy];
[mut removeObject: @"one"];

摘要:

  • 您可以依赖 mutableCopy 的结果是可变的,无论原始类型如何。对于数组,结果应该是 NSMutableArray
  • 不能依赖于copy的结果是可变的! copyNSMutableArray可能返回一个NSMutableArray,因为那是原始类,但是copy 任何任意 NSArray 实例都不会。

编辑:根据 Mark Bessey 的回答重新阅读原始代码。当您创建数组的副本时,当然您仍然可以修改原始数组,无论您如何处理该副本。 copymutableCopy 会影响新数组是否可变。

编辑 2:修正了我的(错误)假设,即 NSMutableArray -copy 将返回 NSMutableArray

关于cocoa - copy 和 mutableCopy 如何应用于 NSArray 和 NSMutableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002174/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com