Утечка памяти в NSMutableArray - PullRequest
0 голосов
/ 29 августа 2011

XCode сообщает об утечке памяти в определенной строке кода:

(NSArray*)myFunction{
   NSMutableArray * tempMapListings=[[NSMutableArray alloc] init]; //Xcode says leak is here

   //do a bunch of stuff to insert objects into this mutable array


    return tempMapListings;
    [tempMapListings release]; // but I release it ?!

   }

Это связано с освобождением в качестве NSArray изменяемого массива?Поскольку mutable наследуется от неизменяемого, я не думаю, что это проблема, и в любом случае объект все равно освобождается.Буду признателен за совет второго глаза.

Ответы [ 2 ]

5 голосов
/ 29 августа 2011

Нет, ты не выпускаешь это.Оператор return действительно завершает выполнение метода в этой точке.Итак, строка под ним, в вашем случае

[tempMapListings release]; // but I release it ?!

, является не выполненной .

Вместо этого вы используете autorelease:

-(NSArray*)myFunction{
    NSMutableArray * tempMapListings=[[NSMutableArray alloc] init];
    //do a bunch of stuff to insert objects into this mutable array
    return [tempMapListings autorelease];
}

О autorelease можно узнать во многих местах.Ищите это в собственной документации Apple;Вы также можете погуглить.

3 голосов
/ 29 августа 2011

Вы отпускаете tempMapListings после вашего возврата из функции.После оператора return в этой ветви больше не выполняется код.Ergo, ваше заявление [tempListListings release] никогда не выполняется.Более того, возвращая его, вы на самом деле не хотите сразу его выпускать - у вызывающей стороны никогда не будет возможности сохранить массив!

Пулы с автоматическим выпуском - ваш друг здесь.Объекты, добавленные в пул авто-выпусков, освобождаются от вашего имени «в конечном итоге», давая вам время для вызова результата.Чтобы добавить свой объект в пул по умолчанию, измените строку выделения на

NSMutableArray *tempMapListings = [[[NSMutableArray alloc] init] autorelease];

и удалите этот последний вызов release.

Для получения дополнительной информации об пулах автоматического выпуска прочитайте Документация Apple .Они действительно очень полезны.

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