2010-08-27 39 views
3

我有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]; 
} 

但因为它认为“数”是一个未使用的变量静态分析器抛出一个警告(这在技术上 - 设置,然后永远不再使用)。有没有更好的方法来清除数组中的所有元素?也许用新的替换阵列?什么会最快并避免静态分析警告?

+0

对于从谁正在说未来的人这个问题:从iOS 6和Mountain Lion开始,您可以使用新的Obj-C文字,因此'[NSNumber numberWithDouble:0.0]'变为'@ 0.0',并且'[NSArray arrayWithObjects:obj1,obj2,...,nil ]'变成'@ [obj1,obj2,...]'。 – 2013-01-24 19:57:31

回答

7

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

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

此循环不会做你认为它的作用。 number只是一个NSNumber实例,你正在做的是改变number指向的NSNumber又例如,不修改myArrayNSNumber原始实例。

NSNumber实例是不可变的,所以只有这样,才能将它们都为零将完全抹去myArray内容,并填写回来了[NSNumber numberWithDouble:0.0]

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

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

您可以在while循环中使用'-replaceObjectAtIndex:withObject:'来避免迭代遍历数组两次。那么你不需要'-removeAllObjects' – JeremyP 2010-08-27 07:42:29