我如何转换NSMutableArray到NSArray在objective-c?


当前回答

NSArray *array = [mutableArray copy];

Copy生成不可变副本。这非常有用,因为苹果可以进行各种优化。例如,将copy发送到一个不可变数组只保留对象并返回self。

如果你不使用垃圾收集或ARC记住-copy保留对象。

其他回答

NSArray *array = [mutableArray copy];

Copy生成不可变副本。这非常有用,因为苹果可以进行各种优化。例如,将copy发送到一个不可变数组只保留对象并返回self。

如果你不使用垃圾收集或ARC记住-copy保留对象。

您可以试试这段代码

NSMutableArray *myMutableArray = [myArray mutableCopy];

and

NSArray *myArray = [myMutableArray copy];
NSArray *array = mutableArray;

这个[mutableArray copy]反模式在示例代码中随处可见。停止这样做的一次性可变数组是瞬态的,并在当前作用域的末尾被释放。

运行时无法优化对即将超出作用域的可变数组的浪费复制,将其降为0并永久释放。

我喜欢这两个主要的解决方案:

NSArray *array = [NSArray arrayWithArray:mutableArray];

Or

NSArray *array = [mutableArray copy];

我在它们中看到的主要区别是当mutableArray为nil时它们的行为:

NSMutableArray *mutableArray = nil;
NSArray *array = [NSArray arrayWithArray:mutableArray];
// array == @[] (empty array)

NSMutableArray *mutableArray = nil;
NSArray *array = [mutableArray copy];
// array == nil

我在swift 3中搜索答案,这个问题被显示为搜索的第一个结果,我从中得到了答案的灵感 这是swift 3的代码

let array: [String] = nsMutableArrayObject.copy() as! [String]