Iphone 每个循环的未使用变量警告打开
我已经创建了一个NSNumber对象数组: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
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]];