2010-08-27 31 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