загрузить изображение, используя этот код:AFNetworking проблема низкой памяти
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
SECustomCollectionViewCell *collectionViewCell = (SECustomCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"SECustomCollectionViewCell" forIndexPath:indexPath];
NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];
collectionViewCell.theImageView.image = nil;
if (artwork[@"video_url"])
{
UIWebView *webView = (UIWebView *)[collectionViewCell.contentView viewWithTag:100];
NSString * html = [self embedYouTube:artwork[@"video_url"] frame:collectionViewCell.frame];
[webView setHidden:NO];
[webView loadHTMLString:html baseURL:nil];
[collectionViewCell.activityIndicator setHidden:YES];
}
else
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:artwork[@"image_url"]]];
UIImage *cachedImage = [[[UIImageView class] sharedImageCache] cachedImageForRequest:request];
if (cachedImage)
{
collectionViewCell.theImageView.image = [UIImage scaleImage:cachedImage toWidth:collectionViewCell.frame.size.width];
[collectionViewCell.activityIndicator setHidden:YES];
}
else
{
[collectionViewCell.theImageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// Only update visible cell, to avoid inserting image to another cell.
SECustomCollectionViewCell *visibleCollectionViewCell = (id)[collectionView cellForItemAtIndexPath:indexPath];
if (visibleCollectionViewCell)
{
[visibleCollectionViewCell.theImageView setImage:[UIImage scaleImage:image toWidth:collectionViewCell.frame.size.width]];
[visibleCollectionViewCell.activityIndicator stopAnimating];
[visibleCollectionViewCell.activityIndicator setHidden:YES];
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
}];
}
}
return collectionViewCell;
}
но занижают проблемы с памятью.
Насколько велик файл? Файлы существенного размера лучше всего загружать потоком непосредственно в файл. В основной теме много вычислений, включая масштабирование изображения. – zaph
@Zaph У меня есть файл jpeg на сервере, который равен 1,4 МБ, но XCode говорит, что там там 70 МБ после загрузки его в изображение. –
Так что это не AFNetworking, а код изображения, вызывающий использование памяти. Насколько большой образ? JPEG или PNG и т. Д. Сжимает изображения, но при создании изображения будет 4 байта на пиксель. Происходит масштабирование, которое также будет использовать память. Вероятно, вы должны добавить пулы автозапуска вокруг методов масштабирования, чтобы память была выпущена раньше. – zaph