如何将数组中的int值添加到NSNumber?

时间:2011-10-12 16:51:47

标签: objective-c nsnumber

这是我的代码

我循环遍历数组并添加到NSNumber

NSNumber *totalValue = 0; 
NSMutableArray *items = [10, 35, 25]; // Just for demo
for (int i=0; i < items.count; i++)
{
    totalValue = totalValue + [items objectAtIndex:i] // How do I add the totalValue?
}

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

NSNumber是一个Objective-C类。与C ++不同,运算符不能在Objective-C中重载,因此您必须手动调用所有内容。

NSNumber *totalValue = [NSNumber numberWithInt:0];
for(…) {
  totalValue = [NSNumber numberWithInt:[totalValue intValue] + [[items objectAtIndex:i] intValue]];
}

您可能希望使用NSInteger,这更快(特别是对于大量项目:内存分配很昂贵):

NSInteger totalValueInteger = 0; // no pointer, NSInteger is a POD!
for (…) {
  totalValueInteger += [[items objectAtIndex:i] integerValue];
}
NSNumber *totalValue = [NSNumber numberWithInteger:totalValueInteger];

当你需要一个Objective-C对象时,你应该只使用NSNumber,就像在数组,字典或编码器中一样。否则,请使用NSIntegerintdouble等POD。

答案 1 :(得分:1)

首先,您可以使用KVC完成整个过程:

NSNumber *total = [items valueForKeyPath:@"@sum.integerValue"];

但是要回答你原来的问题,NSNumber是不可变的,这意味着你不能改变它或增加它的值。在循环的每次迭代中创建一个新的NSNumber是低效且浪费的。

您应该使用标准intNSInteger来总计总数,然后如果需要那么将结果值转换为NSNumber

答案 2 :(得分:0)

也可以使中间体成为一个int。

int temp = 0;
for(…) {
  temp += [[items objectAtIndex:i] intValue];
}
NSNumber *totalValue = [NSNumber numberWithInt:temp];