我有一个实例数组,我最终会根据用户设置进行更改。我将 设置为不可变的 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/