Утечка памяти Копирование данных с сервера - PullRequest
0 голосов
/ 25 августа 2009
for (int i=0; i<[images count] ;i++) {
    url=@"http://192.168.0.101/titan/titanimages/";
    url=[url stringByAppendingString:[images objectAtIndex:i]];
    //NSData *imageData=[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
    destinationPath=[documentsDirectory stringByAppendingString:@"/modelimages"];
    destinationPath=[destinationPath stringByAppendingPathComponent:[images objectAtIndex:i]];

    [imageData writeToFile:destinationPath atomically:YES];

    value=value+divideValue;
    printf("%f\n",value);
    [NSThread detachNewThreadSelector:@selector(updateProgressBar)toTarget:self withObject:nil];
}

Этот код имеет утечку памяти: он не освобождает память NSdata и через некоторое время использование памяти приложением достигает 61 МБ. Может ли кто-нибудь помочь мне выбраться из этого?

1 Ответ

0 голосов
/ 25 августа 2009

Не уверен на 100%, но, вероятно, это связано с использованием «удобного конструктора», в частности, с классом NSData. Когда вы вызываете «dataWithContentsOfURL», вы получаете объект NSData, который автоматически высвобождается автоматически. Однако ваш текущий NSAutoreleasePool может не входить в область действия, которая приведет к освобождению этой памяти до выхода из приложения. Вы можете попробовать вернуться к вызову alloc / init, который вы закомментировали, и попытаться вручную освободить каждый объект NSData внутри цикла, чтобы гарантировать освобождение памяти NSData для каждого экземпляра NSData, созданного в цикле (после сохранения от NSData к файлу).

...