我已经创建了一系列NSNumber对象:
myArray = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithDouble:0.0],
[NSNumber numberWithDouble:0.0],
[NSNumber numberWithDouble:0.0],
[NSNumber numberWithDouble:0.0],
[NSNumber numberWithDouble:0.0], nil];
(虽然我刚想到我可以做到
myArray = [NSMutableArray arrayWithObjects: object1, etc..., nil];
并完全跳过了alloc。哪个更好?)
无论如何,这与我的问题相关:
在应用程序的整个生命周期中,值都会发生变化。在某一点上,我想将它们全部重置为零。以下是我现在正在做的事情:
for (NSNumber *number in myArray) {
number = [NSNumber numberWithDouble:0.0];
}
但静态分析器会发出警告,因为它认为'number'是一个未使用的变量(技术上是 - 设置然后再也不用)。有没有更好的方法将阵列的所有元素归零?也许用新的阵列替换阵列?什么是最快的并避免静态分析警告?
答案 0 :(得分:8)
关于创建数组,请记住alloc
+ initWithObjects:
之后需要显式发布,而arrayWithObjects:
便捷方法则不然(并且它不会在迭代中存活运行循环,除非你保留它。)
for (NSNumber *number in myArray) {
number = [NSNumber numberWithDouble:0.0];
}
此循环不会按照您的想法执行。 number
只需指向到NSNumber
个实例,而您正在做的就是将number
更改为指向NSNumber
的另一个实例,它确实不要修改NSNumber
中myArray
的原始实例。
NSNumber
个实例是不可变的,因此将它们全部设置为零的唯一方法是完全删除myArray
的内容并用[NSNumber numberWithDouble:0.0]
NSUInteger count = [myArray count];
[myArray removeAllObjects];
while(count--)
[myArray addObject:[NSNumber numberWithDouble:0.0]];