我有一个scrollView,其中我从网络加载图像。我有时会得到内存警告,我认为这是因为我在图像加载程序中做了一些错误。 我正在尝试解决一些小问题,并且我只是想在这里展示代码,并且也许还有更多的事情可以解决,以摆脱此警告。将图像加载到滚动条时发生内存泄漏
因此,每次滚动(iPad)只有4/5图像是:current page-3->current page+3
。
这是我如何加载图像(每个图像也有与苹果的类模糊效果): (?每次我应该分配的ImageView我可以在这里提高的东西)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^
{
NSData *imdata2 = [NSData dataWithContentsOfURL:url];
dispatch_async(dispatch_get_main_queue(),^
{
UIImage *theImage=[UIImage imageWithData:imdata2 scale:1];
UIImage *LightImage = [theImage applyLightEffect];
UIImage *scaledImage =[resizer resizeImageToWidth:[Globals sharedGlobals].imagesWidth WithImage:theImage];
CGRect viewSizeBack=CGRectMake(scroller.bounds.size.width*toPage , 0, scroller.bounds.size.width, scroller.bounds.size.height);
int x=[Globals sharedGlobals].pageMargins;
int y=([UIScreen mainScreen].bounds.size.height-scaledImage.size.height)/2;
CGRect viewSizeFront=CGRectMake(x , y, scaledImage.size.width,scaledImage.size.height);
UIImageView *backImageView=[[UIImageView alloc] initWithFrame:viewSizeBack];
UIImageView *frontImageView=[[UIImageView alloc] initWithFrame:viewSizeFront];
backImageView.layer.cornerRadius = 0.0;
backImageView.layer.masksToBounds = YES;
backImageView.image=LightImage;
frontImageView.layer.cornerRadius = 0.0;
frontImageView.layer.masksToBounds = YES;
frontImageView.image=scaledImage;
frontImageView.layer.borderWidth=1.0;
frontImageView.layer.borderColor=[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.0].CGColor;
[backImageView addSubview:frontImageView];
backImageView.tag=toPage;
frontImageView.tag=toPage;
[scroller addSubview:backImageView];
});
});
这是不完全正确,因为当用户滚动速度不够快,他会得到仍没有图像的网页,并看到一个白色的空间 - 这对我的意见是一个糟糕的用户界面..所以当我给它6张图片,我可以滚动非常快,并始终在我的滚动内容。你不觉得吗? – Curnelious
这是一个折衷,如果你有内存可用,那么确定,启用快速滚动,但我们谈论的是内存受限的设备,快速滚动通常是边缘情况,因此只有少数人会“受益”是反生产力的。这也是一个好处吗?你可以在快速滚动的时候有用地看到图像... – Wain
是的..我认为你是对的,我已经尝试过将它设置为3张图像,但我仍然得到这个内存警告 - 它发生在我滚动的那一刻我认为他们必须做的异步加载..有没有办法找到确切的问题? – Curnelious