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

时间:2010-08-27 05:56:59

标签: 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];

(虽然我刚想到我可以做到

myArray = [NSMutableArray arrayWithObjects: object1, etc..., nil];

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

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

在应用程序的整个生命周期中,值都会发生变化。在某一点上,我想将它们全部重置为零。以下是我现在正在做的事情:

 for (NSNumber *number in myArray) {
     number = [NSNumber numberWithDouble:0.0];
 }

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

1 个答案:

答案 0 :(得分:8)

关于创建数组,请记住alloc + initWithObjects:之后需要显式发布,而arrayWithObjects:便捷方法则不然(并且它不会在迭代中存活运行循环,除非你保留它。)

for (NSNumber *number in myArray) {
    number = [NSNumber numberWithDouble:0.0];
}

此循环不会按照您的想法执行。 number只需指向NSNumber个实例,而您正在做的就是将number更改为指向NSNumber的另一个实例,它确实不要修改NSNumbermyArray的原始实例。

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

填充它
NSUInteger count = [myArray count];
[myArray removeAllObjects];

while(count--)
    [myArray addObject:[NSNumber numberWithDouble:0.0]];