将图像加载到滚动条时内存泄漏

时间:2014-04-25 11:38:54

标签: ios objective-c memory-management uiscrollview uiimageview

我有一个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];


                        });
                   });

2 个答案:

答案 0 :(得分:0)

您最多只能加载3张图片 - 上一页(如果有),当前页面和下一页。

你上面加载的任何其他图片都是浪费,因为你看不到它们,而且它们只是在没有充分理由的情况下占用内存。如果图像不是太大,那么你可以将它们保存在内存中并在收到警告时清除它们,但对于大图像,这通常会导致问题。

答案 1 :(得分:0)

如果您不使用ARC,请添加:

[backImageView autorelease];
[frontImageView autorelease];