我有一个scrollView,其中我从网络加载图像。我有时得到内存警告,我认为这是因为我对图像加载器做错了。 我正在尝试解决一些小问题,我只是想在这里显示代码,并听到可能有更多的东西我可以修复以摆脱这些警告。
因此,每次滚动条(iPad)只有4/5张图像为current page-3->current page+3
时。
这就是我加载图片的方式(每张图片对Apple的课程也有模糊效果): (我应该每次都分配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];
});
});
答案 0 :(得分:0)
您最多只能加载3张图片 - 上一页(如果有),当前页面和下一页。
你上面加载的任何其他图片都是浪费,因为你看不到它们,而且它们只是在没有充分理由的情况下占用内存。如果图像不是太大,那么你可以将它们保存在内存中并在收到警告时清除它们,但对于大图像,这通常会导致问题。
答案 1 :(得分:0)
如果您不使用ARC,请添加:
[backImageView autorelease];
[frontImageView autorelease];