В моем приложении у меня есть куча разных пакетов изображений для загрузки. Изображения загружаются с моего сайта по одному. Пакеты содержат от 100 до 1500 изображений, размер каждого изображения составляет от 100 до 200 КБ.
При загрузке изображений у меня есть метод, который выбирает изображения для загрузки, затем у меня есть второй метод, который выполняет фактическую загрузку на основе параметров, отправленных из основного метода. Вот код метода загрузки:
-(BOOL) downloadImageName:(NSString *)imageName ImageGroup:(NSString *)imageGroup AndRow:(int)row {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSURL *downloadURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.website.com/%@_0001.jpg",imageName]];
NSData *data = [NSData dataWithContentsOfURL:downloadURL];
NSString *savePath = [NSString stringWithFormat:@"%@/%@^%@_%@.jpg",docsPath,currentServerCycle,imageGroup,imageName];
BOOL downloaded = [data writeToFile:savePath atomically:YES];
if (downloaded)
return YES;
}
else {
return NO;
}
}
Проблема у меня вот в чем:
Когда я запускаю это с инструментами производительности, просматривающими распределения, я вижу, что приложение сохраняет mallocs (NSConcreteData) каждый раз, когда загружается изображение, и освобождает их только после завершения основного метода (тот, который вызывает этот метод загрузки). Это нормально для небольших пакетов изображений, но более крупные, очевидно, дают сбой после того, как мои общие выделения достигают примерно 300+ МБ (нормальный объем распределений в моем приложении составляет около 3 МБ).
Они не утекают, потому что после загрузки пакета изображений и завершения метода все malloc исчезают.
Я попытался вручную выделить и освободить NSData *data, но это не дало результата.