В моем приложении у меня есть куча разных пакетов изображений для скачивания. Изображения загружаются с моего сайта по одному. Пакеты содержат от 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;
}
}
У меня проблема в следующем:
Когда я запускаю это с инструментами производительности, которые смотрят на распределение, я вижу, что приложение хранит malloc (NSConcreteData) каждый раз при загрузке изображения и освобождает их только после завершения основного метода (вызывающего этот метод загрузки). Это хорошо для небольших пакетов изображений, но более крупные, очевидно, вылетают после того, как мои общие ресурсы достигли примерно 300 + МБ (обычный объем ресурсов в моем приложении составляет около 3 МБ).
Они не протекают, потому что как только пакет изображений загружен и метод завершается, все mallocs исчезают.
Я пытался вручную распределять и освобождать данные NSData *, но это не имеет никакого эффекта.