objective-c - 改变实例 NSArray

标签 objective-c ios

我有一个实例数组,我最终会根据用户设置进行更改。我将 设置为不可变的 NSArray:

@property (strong, nonatomic) NSArray *pointArray;

当我需要更改数组时,我一直在这样做:

-(void)changePointArray
{
    NSMutableArray *tempArray = [NSMutableArray arrayWithArray:self.pointArray];

    // Make changes

    self.pointArray = [NSArray arrayWithArray:tempArray];
}

这是可接受的做法还是我造成了泄漏?我应该改用类型转换吗:

self.pointArray = (NSArray *)tempArray;

或者甚至需要担心将 NSMutableArray 设置为 NSArray?

self.pointArray = tempArray;

最佳答案

您有什么顾虑?对于这样的场景,人们可能会关心原子性、防止其他人修改数组的安全性,两者都不是,或者两者兼而有之。如果您对两者都不关心,只需将您的属性设为 NSMutableArray 并就地修改它即可。

如果您担心原子性,您应该制作一个副本,修改副本,然后将其换入(但是,当然,该对象的所有用户都必须知道制作他们自己的 指针的私有(private)副本 用于一系列“原子”引用,而不是为每个引用重新引用属性)。

为了安全起见,您应该将数组设为不可变的 NSArray,并将该属性设为只读。

关于objective-c - 改变实例 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959759/

相关文章:

ios - 如何保护 iOS 应用程序免受攻击者使用 iXGuard

ios - 核心数据多对多关系和数据完整性

ios - EventKit 创建并自动生成 defaultCalendar

IOS 在 NS(Mutable)Dictionary 中获取一个数组

ios - 计算与位置的角度

objective-c - Objective-C 如何处理不可变字符串的内存

ios - 模拟弹出框的模糊效果时如何为屏幕截图创建蒙版图像

ios - UITableView Row Animation Automatic如何判断使用哪个动画?

ios - Objective-C 中的同步和异步调用与多线程有什么区别?

ios - Watchkit-应用程序 : handleWatchKitExtensionRequest error