Проблема заключается в том, что моё приложение жрёт много оперативной памяти (300 мб). На 4s приложение вылетает, на остальных, кроме 6 и 6+ виснет. В приложении много картинок и таблиц с картинками. Мне нужно снизить нагрузку на оперативную память, как-то иначе грузить картинки с сервера.
Вот код, как сейчас реализована загрузка картинок:
NSString *filePath1 = [NSString stringWithFormat:@"%@",responsePhotos[0]];
NSURL *imgurl=[NSURL URLWithString:filePath1];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *dataimage1 = [NSData dataWithContentsOfURL:imgurl];
UIImage *imim1 = [UIImage imageWithData:dataimage1];
dispatch_async(dispatch_get_main_queue(), ^{
if (imim1==nil) {
cell.imgauto1.image=[UIImage imageNamed:@"camera_a.gif"];
}else{
cell.imgauto1.image=imim1;
}
});
});
Ответ
Вы очень плохо все делаете,так нельзя делать, делать загрузку картинки, потом сразу же ее в ячейку ложить. Для загрузки изображений и их кеширования используйте SDWebImageCash, очень простая библиотека, и очень хорошо написана, либо же, напишите свое кеширование, но записывать картинки вручную, тем более как я понимаю в методе делегата таблицы, это очень плохо. Можно еще использовать CoreData, для хранения тех же изображений. Теперь по поводу архитектуры, и как правильно сделать, вы загружаете изображения в методе создания ячеек - убираем это от туда, это метод только для передачи в ячейки уже готовой информации. В методе viewDidLoad вы должны загрузить часть изображений, и уже передать их скачанные в ячейку, и назначить. Почему часть, потому что качать например 100 картинок, это значит что пользователь будет все это время ждать их загрузки, тоже плохо, используйте infinityscroll и pulltorefresh, принцип такой:дойдя до конца таблицы, 10 ячейки, например, начните загрузку еще 10 штук, и потом обновите таблицу.
Комментариев нет:
Отправить комментарий