我如何转换NSMutableArray到NSArray在objective-c?
当前回答
NSArray *array = [mutableArray copy];
Copy生成不可变副本。这非常有用,因为苹果可以进行各种优化。例如,将copy发送到一个不可变数组只保留对象并返回self。
如果你不使用垃圾收集或ARC记住-copy保留对象。
其他回答
NSMutableArray是NSArray的一个子类,所以你并不总是需要转换,但如果你想确保数组不能被修改,你可以根据你是否希望它自动释放来创建一个NSArray:
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
编辑:由Georg Schölly提供的解决方案是一种更好的方式,而且非常干净,特别是现在我们有了ARC,甚至不需要调用autorelease。
NSArray *array = [mutableArray copy];
Copy生成不可变副本。这非常有用,因为苹果可以进行各种优化。例如,将copy发送到一个不可变数组只保留对象并返回self。
如果你不使用垃圾收集或ARC记住-copy保留对象。
objective - c
下面是将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;
斯威夫特
在Swift 3.0中有新的数据类型Array。使用let关键字声明数组,它就会变成NSArray,如果使用var关键字声明数组,它就会变成NSMutableArray。
示例代码:
let newArray = oldArray as Array
我喜欢这两个主要的解决方案:
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
在objective-c中:
NSArray *myArray = [myMutableArray copy];
用swift:
var arr = myMutableArray as NSArray
推荐文章
- iPhone上UIView和UILabels的渐变
- 在实现API时,我如何避免在块中捕获自我?
- 从另一个应用程序打开设置应用程序
- 使用NSURLSession发送POST请求
- 自动布局- UIButton的固有大小不包括标题插入
- 如何更改导航栏上“后退”按钮的标题
- 有没有办法从UITableView中移除分隔线?
- 如何在Objective-C中声明类级属性?
- 在Objective-C中@property保留,赋值,复制,非原子
- 我如何在NSAttributedString中创建一个可点击的链接?
- 停止UIWebView垂直“弹跳”?
- 对未渲染的视图进行快照,结果是一个空快照
- 开始使用instancetype而不是id是否有益?
- 改变UISegmentedControl的字体大小
- 我可以强制UITableView隐藏分隔符之间的空单元格吗?