每个循环都有未使用的变量警告

Zev*_*erg 3 iphone objective-c ios4 ios

我有一个由此创建的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];
Run Code Online (Sandbox Code Playgroud)

(虽然刚发生在我身上,我本可以做到的

myArray = [NSMutableArray arrayWithObjects: object1, etc..., nil];
Run Code Online (Sandbox Code Playgroud)

并完全跳过了alloc.哪个更好?)

无论如何,这与我的问题相关:

在应用程序的整个生命周期中,值都会发生变化.在某一点上,我想将它们全部重置为零.我现在就是这样做的:

 for (NSNumber *number in myArray) {
     number = [NSNumber numberWithDouble:0.0];
 }
Run Code Online (Sandbox Code Playgroud)

但静态分析器会发出警告,因为它认为"数字"是一个未使用的变量(技术上是 - 设置然后再也不用).有没有更好的方法将阵列的所有元素归零?也许用新的阵列替换阵列?什么是最快的,避免静态分析警告?

dre*_*lax 8

关于创建数组,请记住alloc+之后initWithObjects:需要显式释放,而arrayWithObjects:方便方法则不会(并且除非保留它,否则它将无法在运行循环的迭代中存活).

for (NSNumber *number in myArray) {
    number = [NSNumber numberWithDouble:0.0];
}
Run Code Online (Sandbox Code Playgroud)

这个循环不符合你的想法.number只是指向一个NSNumber实例,而你所做的只是改变number为指向另一个实例NSNumber,它不会修改NSNumberin 的原始实例myArray.

NSNumber实例是不可变的,因此将它们全部设置为零的唯一方法是完全删除内容myArray并将其填充[NSNumber numberWithDouble:0.0]

NSUInteger count = [myArray count];
[myArray removeAllObjects];

while(count--)
    [myArray addObject:[NSNumber numberWithDouble:0.0]];
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过在while循环中使用`-replaceObjectAtIndex:withObject:`来避免遍历数组两次.然后你不需要`-removeAllObjects` (2认同)