Предупреждение о неиспользуемой переменной для каждого цикла - PullRequest
3 голосов
/ 27 августа 2010

У меня есть массив объектов 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];
 }

Но Static Analyzer выдает предупреждение, потому что считает «число» неиспользуемой переменной (что технически установлено - установлено и затем никогда больше не используется).Есть ли лучший способ обнулить все элементы массива?Возможно, заменить массив на новый?Что было бы самым быстрым и избежать предупреждения статического анализа?

1 Ответ

8 голосов
/ 27 августа 2010

Что касается создания массива, помните, что alloc + initWithObjects: требует явного освобождения впоследствии, тогда как удобный метод arrayWithObjects: не требует (а также, он не переживет итерацию цикла выполнения, пока вы сохранить его).

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

Этот цикл не делает то, что вы думаете, он делает. number просто указывает на экземпляр NSNumber, и все, что вы делаете, это изменяете number для указания на другой экземпляр NSNumber, он не изменяет исходный экземпляр NSNumber в myArray.

NSNumber экземпляры являются неизменяемыми, поэтому единственный способ установить их все в ноль - это полностью стереть содержимое myArray и заполнить его обратно [NSNumber numberWithDouble:0.0]

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

while(count--)
    [myArray addObject:[NSNumber numberWithDouble:0.0]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...