2012-03-27 2 views
0
target_locations[ 0] = [[CLLocation alloc] initWithLatitude : 51.50373056 
                 longitude : 0.129986111]; 
    [target_locations[ 0] release]; 

Рассмотрите приведенный выше код, является ли он правильным способом сохранить присвоенный объект в количестве, равном 1?NSMutableArray сохранить кол-во

* Предполагая, что ARC не активирован.

+1

Ответ зависит от типа 'target_locations' (хотя вы не должны _really_ посылать' release' в объект в массиве в любом случае). 'NSArray' или массив plain-C? –

+2

Think * ownership *, нет * сохранить счет *. Или, если вам нужно, не позволяйте @bbum знать. –

+0

target_locations является NSArray, надеюсь, что bbum сделает комментарий ... :) – Stanley

ответ

1

Учитывая, что target_locations является NSMutableArray, и ARC не включен, правильная процедура здесь следующим образом:

CLLocation * newLocation = [[CLLocation alloc] initWithLatitude : 51.50373056 
                 longitude : 0.129986111]; 
target_locations[0] = newLocation; 
[newLocation release]; 

Вы не должны посылать release в результате доступа к массиву, потому что вы не» t владеют этим объектом через этот указатель. Хотя он работает в этом случае, он неверно семантически и может вызвать проблемы, если вы привыкнете.

Также рассмотрите возможность переименования target_locations в targetLocations, что согласуется с стилем какао. Использование подчеркивания делает его похожим на простой массив C, а не на объект.

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