#objective-c
#objective-c
Вопрос:
Всем привет,
Я создаю scrollview, который прокручивает 100 изображений домов. Это работает. Но…. Для каждого просмотренного изображения выделяемая память увеличивается на 2,5 МБ. В конце концов приложение вышло из строя из-за нехватки памяти.
Я использую код для распаковки изображения ….. — (void)распаковать { const CGImageRef CGImage = [self CGImage];
const int width = CGImageGetWidth(cgImage);
const int height = CGImageGetHeight(cgImage);
const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
const CGContextRef context = CGBitmapContextCreate(
NULL, /* Where to store the data. NULL = don’t care */
width, height, /* width amp; height */
8, width * 4, /* bits per component, bytes per row */
colorspace, kCGImageAlphaNoneSkipFirst);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
CGContextRelease(context);
}
но это не работает, очень много времени уходит на загрузку изображения.
Комментарии:
1. каков размер изображения?
2. Почему вы не загружаете его лениво?
3. Размер 300 * 404 разрешение 162,99
4. изображения получены с сервера
Ответ №1:
Я также сталкиваюсь с той же проблемой, решение, которое я выбрал, заключалось в том, что я изменил размер изображения в размере 320 * 460, а затем размер изображения стал примерно на 50 КБ, не более.Вы также можете сделать то же самое.
Код для изменения размера изображения:-
предположим, у вас есть ваше изображение в переменной image UIImage, а новое изображение сохраняется в editedImage, который также является объектом UIImage.
if (self.image.size.height>460 || self.image.size.width>320) {
UIGraphicsBeginImageContext(CGSizeMake(320,480));
[self.image drawInRect: CGRectMake(0, 0,320,480)];
self.editedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"smallImage%f",self.editedImage.size.height);
NSLog(@"smallImage%f",self.editedImage.size.width);
}
else {
self.editedImage=self.image;
}
Ответ №2:
Вам нужно провести некоторую оптимизацию памяти. Вот логика для экономии памяти, но вам нужно реализовать ее самостоятельно. Не добавляйте все изображения в scrollview, просто добавьте изначально 5 изображений. Предположим, пользователь просматривает image1, и теперь он переходит к image3 когда пользователь достигает изображения 3, удалите image1 из ScrollView, чтобы освободить память. И когда пользователь прокручивает вперед, добавляйте следующие изображения, например, когда пользователь находится на image4, добавляйте image6 и делайте наоборот. Когда пользователь переходит с image4 на image3, удалите image6 из памяти. Таким образом, в памяти будет только 5 изображений.
Ответ №3:
Три способа:
1: Trying Apple's sample code called "StreetScroller", then you'll get to know how to make scrollview work definitely.
2:Create thumbnails for large images and save to your own directory. Then read them from url.
3: Use UIpageviewcontroller