Вырастите NSMutableArray с объектами NSNumber - PullRequest
0 голосов
/ 07 июля 2011

Извините за вопрос новичка, но мне нужен NSMutableArray с некоторым NSNumber внутри, динамически создаваемый в цикле for.Мой код выглядит так:

for (...){
NSNumber *temp_number = [[NSNumber alloc] initWithInteger:someNSInteger];
        [target_array addObject:[temp_number copy]];
        [temp_number release];
}

Это правильный способ сделать это?Это течет?

Спасибо!Miguel

1 Ответ

3 голосов
/ 07 июля 2011

Да, это утечка. Вы хотите:

NSNumber *temp_number = [[NSNumber alloc] initWithInteger:someNSInteger];
    [target_array addObject:temp_number];
    [temp_number release];

Итак, нет copy. Логика в том, что, поскольку вы используете alloc, вы в конечном итоге владеете temp_number. Затем вы добавляете его в массив, и массив делает все, что ему нужно. Вы использовали temp_number по прямому назначению, поэтому вы больше не хотите владеть им и выпускать его.

Если вы возьмете копию, это создаст другой экземпляр NSNumber, которым вы также владеете, и, следовательно, который вы также должны выпустить, когда закончите.

На практике массив (если он выделен и существует, а не равен нулю), сохранит объект для себя, но это деталь реализации, специфичная для этого класса, а не то, от чего вы должны зависеть или даже особенно интересоваться помимо контракта, который говорит, что объекты, которые вы добавляете, позже могут быть найдены в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...