我如何转换NSMutableArray到NSArray在objective-c?
当前回答
您可以试试这段代码
NSMutableArray *myMutableArray = [myArray mutableCopy];
and
NSArray *myArray = [myMutableArray copy];
其他回答
NSArray *array = [mutableArray copy];
Copy生成不可变副本。这非常有用,因为苹果可以进行各种优化。例如,将copy发送到一个不可变数组只保留对象并返回self。
如果你不使用垃圾收集或ARC记住-copy保留对象。
NSArray *array = mutableArray;
这个[mutableArray copy]反模式在示例代码中随处可见。停止这样做的一次性可变数组是瞬态的,并在当前作用域的末尾被释放。
运行时无法优化对即将超出作用域的可变数组的浪费复制,将其降为0并永久释放。
在objective-c中:
NSArray *myArray = [myMutableArray copy];
用swift:
var arr = myMutableArray as NSArray
NSMutableArray是NSArray的一个子类,所以你并不总是需要转换,但如果你想确保数组不能被修改,你可以根据你是否希望它自动释放来创建一个NSArray:
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
编辑:由Georg Schölly提供的解决方案是一种更好的方式,而且非常干净,特别是现在我们有了ARC,甚至不需要调用autorelease。
您可以试试这段代码
NSMutableArray *myMutableArray = [myArray mutableCopy];
and
NSArray *myArray = [myMutableArray copy];
推荐文章
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 为什么单元测试中的代码不能找到包资源?
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?