Как освободить массив, который создается внутри цикла for в Objective C? - PullRequest
0 голосов
/ 01 ноября 2010

Я создал массив внутри цикла for и не могу его освободить.Это показывает утечки памяти.Вот мой код:

for(int i = 0; i < [magArr count]; i++)
{
   Magazine *magObj = [magArr objectAtIndex:i];
   NSMutableArray *myArray = [data readEditions:[magObj.magazineID intValue]:0];//returns a array
}
[myArray release]; // memory leaks (retain count to -1)

Если я использую также автоматический сброс, он показывает утечку памяти.Как решить эту утечку?

1 Ответ

6 голосов
/ 01 ноября 2010

Если массив, возвращаемый из readEditions, не выпускается автоматически, он нарушает политику владения объектом .

Вы должны освободить объект внутрицикл, потому что он просачивается после каждой итерации цикла, если readEditions возвращает объект с счетом сохранения> 0.

Вы должны возвратить автоматически освобожденный объект из readEditions, потому что имя метода не содержит alloc, new или copy.

Затем, если хотите, вы можете retain автоматически выпущенный объект, чтобы сохранить его.

Вот пример того, как ваш цикл будет выглядеть, если бы readEditions возвратил автоматически выпущенный объект:

for(int i = 0; i < [magArr count]; i++)
{
   Magazine *magObj = [magArr objectAtIndex:i];
   NSMutableArray *myArray = [[data readEditions:[magObj.magazineID intValue]:0] retain];
   //do something with myArray...
   [myArray release];
}
...