我有一个包含多个对象的数组,我想为每个值添加90.0。 我想使用枚举来执行此操作。然后我创建此:
[myArray enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
double aValue = [obj doubleValue];
aValue += 90.0;
obj = [NSNumber numberWithDouble:aValue];
}];
我的问题是关于最后一行。我得到对象值,添加90然后我必须将它存回。因为这有点奇怪,因为我正在处理对象级别,我不确定第三行是否具有正确的语法来将更新的值存储回对象。 Xcode抱怨“obj”从未使用过,因为它认为我将数字分配给obj并打算使用它,但我只是将值存回。
这是对的吗?
答案 0 :(得分:2)
obj
不是引用或指针,您实际上无法将其存储回来。 NSArray
不支持此功能。你可以做的不是存储NSNumbers,而是存储指向NSNumber(即NSNumber **)的指针,并更新对新对象的引用。
将您的号码存储在普通double[]
数组中也可以。
答案 1 :(得分:1)
更好的方法是将修改后的值存储到新数组中:
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:[myArray count]];
__block newArray;
[myArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
double aValue = [obj doubleValue];
aValue += 90.0;
[newArray insertObject:[NSNumber numberWithDouble:aValue] atIndex:idx];
}];
note 我直接输入了这个,所以请原谅任何语法错误。
答案 2 :(得分:0)
如果您想进行就地操作,可以使用:
[myArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
double aValue = [obj doubleValue];
aValue += 90.0;
[myArray replaceObjectAtIndex:idx withObject:[NSNumber numberWithDouble:aValue]];
}];
虽然NSMutableArray不应该是线程安全的,但通常只有在你改变它的大小时才会这样。在简单的测试中工作得很好,但使用风险自负。