2015-01-15 3 views
0

В названии говорится все. Вот где мой deadstore предупреждение:Мертвый магазин при использовании initWithCapacity в массиве

//"objects" is just an array that I have above 
NSMutableArray *arr = [[NSMutableArray alloc]initWithCapacity:[objects count]]; 
arr = [methodReturningAnArray:withArrayParam]; //i give "objects" as param 

И это говорит value stored during the initialization is never read на [[alloc]init] линии.

Но я читал, что предоставление массива определенного размера во время init более оптимально, и здесь я могу себе это позволить. Есть ли что-то, что я делаю неправильно или есть какая-то магия?

ответ

3

Вы инициализировать arr со значением здесь:

NSMutableArray *arr = [[NSMutableArray alloc]initWithCapacity:[objects count]]; 

Тогда вы сразу же перезаписать это значение и присваивает ему новое значение в здесь:

arr = [methodReturningAnArray:withArrayParam]; 

Вместо этого, просто сделать:

NSMutableArray *arr = [methodReturningAnArray:withArrayParam]; 

Инициализация NSMutableArray с емкостью оптимальна, если вы изменяете отдельные элементы массива. То, что вы сделали здесь, это замена массива оптовой.

+0

Но дело в том, что я не назначаю никакого значения, просто размер емкости! Является ли размер считается ценным? Этот размер полностью игнорируется на следующей строке? –

+1

Нет, вы * делаете * присваиваете значение. Вы назначаете значение '[[NSMutableArray alloc] initWithCapacity: [objects count]]'. –

+0

Когда вы назначаете init' класс, вы получаете экземпляр этого класса. 'NSMutableArray' - это класс в Objective-C; это не похоже на 'int [] c_array = int [6];' в C. 'NSMutableArray * arr' является указателем на объект, который имеет методы и свойства. –

Смежные вопросы