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

Objective c 如何将数组中的int值添加到NSNumber?,objective-c,nsnumber,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? } NSNumber*to

这是我的代码

我在数组中循环并添加到
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?
}
NSNumber*totalValue=0;
NSMutableArray*项=[10,35,25];//只是为了演示
对于(int i=0;i

有人能帮我写这段代码吗?

NSNumber
是一个Objective-C类。与C++不同,运算符不能在ObjtoVc中超载,因此必须手动调用所有的东西。
NSNumber *totalValue = [NSNumber numberWithInt:0];
for(…) {
  totalValue = [NSNumber numberWithInt:[totalValue intValue] + [[items objectAtIndex:i] intValue]];
}
您可能希望改用
NSInteger
,这会更快(特别是对于大量项目:内存分配非常昂贵):



当您需要Objective-C对象时,如在数组、字典或编码器中,您应该只使用
NSNumber
。否则,请使用类似于
NSInteger
int
double
的POD。首先,您可能可以使用KVC完成整个任务:

NSNumber *total = [items valueForKeyPath:@"@sum.integerValue"];
但要回答您最初的问题,
NSNumber
是不可变的,这意味着您不能更改它或增加它的值。在循环的每次迭代中创建一个新的
NSNumber
,既低效又浪费


您应该使用标准的
int
NSInteger
来求和总数,然后如果需要,在最后将结果值转换为
NSNumber

也可以将中间值设为int

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

感谢您的帮助。我强烈怀疑,虽然这更简洁/富有表现力,但执行起来会更慢。请在仪器中试用。然后决定在这种情况下性能是否重要。
int temp = 0;
for(…) {
  temp += [[items objectAtIndex:i] intValue];
}
NSNumber *totalValue = [NSNumber numberWithInt:temp];