Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 每个循环的未使用变量警告打开_Iphone_Objective C_Ios4_Ios - Fatal编程技术网

Iphone 每个循环的未使用变量警告打开

Iphone 每个循环的未使用变量警告打开,iphone,objective-c,ios4,ios,Iphone,Objective C,Ios4,Ios,我已经创建了一个NSNumber对象数组: myArray = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithDouble:0.0], [NSNumber numberWithDouble:0.0], [NSNumber numberWithDouble:0.0], [NSNumber numberWithDou

我已经创建了一个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”是一个未使用的变量(从技术上讲,它是设置好的,然后再也不用了)。是否有更好的方法将数组中的所有元素归零?也许用一个新的阵列替换该阵列?最快的方法是什么并避免静态分析警告?

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

此循环不会执行您认为它执行的操作。
number
只是指向一个
NSNumber
实例,您所做的只是更改
number
以指向另一个
NSNumber
实例,它不会修改
myArray
中的
NSNumber
的原始实例

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

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

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

通过在while循环中使用
-replaceObjectAtIndex:withObject:
,可以避免在数组中重复两次。然后,对于将来遇到此问题的人,您不需要
-removeAllObjects
:从iOS 6和Mountain Lion开始,您可以使用新的Obj-C文本,因此
[NSNumber numberWithDouble:0.0]
变为
@0.0
[NSArray ARRAY WITH obj1,obj2,…,nil]
变为
@[obj1,obj2,…]
NSUInteger count = [myArray count];
[myArray removeAllObjects];

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