mar*_*rcy 375 cocoa cocoa-touch objective-c nsmutablearray nsarray
如何在objective-c中将NSMutableArray转换为NSArray ?
Geo*_*lly 499
NSArray *array = [mutableArray copy];
Run Code Online (Sandbox Code Playgroud)
Copy制作不可变的副本.这非常有用,因为Apple可以进行各种优化.例如,发送copy到不可变数组只保留对象并返回self.
如果您不使用垃圾收集或ARC,请记住-copy保留该对象.
hal*_*ski 359
An NSMutableArray是一个子类,NSArray所以你不需要总是需要转换,但如果你想确保不能修改数组,你可以创建NSArray这些方法中的任何一种,具体取决于你是否要自动释放它:
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
Run Code Online (Sandbox Code Playgroud)
编辑: GeorgSchölly提供的解决方案是一种更好的方式,更清洁,特别是现在我们有ARC,甚至不需要调用autorelease.
Ric*_*ble 113
我喜欢这两个主要解决方案:
NSArray *array = [NSArray arrayWithArray:mutableArray];
Run Code Online (Sandbox Code Playgroud)
要么
NSArray *array = [mutableArray copy];
Run Code Online (Sandbox Code Playgroud)
我在其中看到的主要区别是当mutableArray为零时它们的行为:
NSMutableArray *mutableArray = nil;
NSArray *array = [NSArray arrayWithArray:mutableArray];
// array == @[] (empty array)
NSMutableArray *mutableArray = nil;
NSArray *array = [mutableArray copy];
// array == nil
Run Code Online (Sandbox Code Playgroud)
小智 18
你试试这个代码---
NSMutableArray *myMutableArray = [myArray mutableCopy];
Run Code Online (Sandbox Code Playgroud)
和
NSArray *myArray = [myMutableArray copy];
Run Code Online (Sandbox Code Playgroud)
下面是将 NSMutableArray 转换为 NSArray 的方法:
//oldArray is having NSMutableArray data-type.
//Using Init with Array method.
NSArray *newArray1 = [[NSArray alloc]initWithArray:oldArray];
//Make copy of array
NSArray *newArray2 = [oldArray copy];
//Make mutablecopy of array
NSArray *newArray3 = [oldArray mutableCopy];
//Directly stored NSMutableArray to NSArray.
NSArray *newArray4 = oldArray;
Run Code Online (Sandbox Code Playgroud)
在 Swift 3.0 中有新的数据类型Array。使用let关键字声明数组然后它会变成NSArray如果声明使用var关键字然后它变成NSMutableArray。
示例代码:
let newArray = oldArray as Array
Run Code Online (Sandbox Code Playgroud)