UIImageView使用了大量内存

时间:2014-08-07 09:52:46

标签: ios objective-c uiimageview uiimage

我正在创建某种图库。用户可以在照片之间滑动。 (它只是概念,我知道有很好的库可以处理这个,但它只是解释这个概念。)

我正在装载3 UIImageView,我不断重复使用它们。 (懒加载)。问题是,当我从一个imageview更改图像dynamiccaly,并继续更改它时,内存正在填满。它就像它没有发布以前附加的图像。我正在使用我已从某种Web服务下载的UIImages数组。

当我加载我的视图时,我正在分配并初始化UIImageView,然后我将其添加到视图中。

UIImageView* _imgView;
NSArray* _imgArray;

所以这个数组包含UIImage

-(void)changeImageIndex: (int) i
{
   _imgView.image = [_imgArray objectAtIndex:i];
}

如果我不断改变图像索引,记忆就会被填满并填满......:s。 我的项目启用了ARC。

有人知道如何解决它?

通过此方法添加(实际更改)图像:

-(void)setCurrentMovie:(GFilm*)film
{

    _currentMovie = nil;
    _currentMovie = film;
    _posterView.image = nil;
    [_youtubeView loadHTMLString:@"" baseURL:nil];
    [_youtubeView stopLoading];
    [_youtubeView setDelegate:nil];

    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    [_scrollView setContentOffset:CGPointMake(0, 0) animated:NO];

    CGFloat leftHeight = 0.f;

    _leftView.frame = CGRectMake(10, 10, 110, 205);
    leftHeight += _leftView.frame.size.height;
    _posterView.frame = CGRectMake(0, 0, _leftView.frame.size.width, _leftView.frame.size.height - 40);

    GImage* img = (GImage*)[_currentMovie.imageList objectAtIndex:0];
    //_posterView.image = img.localImage;
    //@autoreleasepool {


    _posterView.image = [UIImage imageWithData:UIImagePNGRepresentation(img.localImage)];



    _btnVertoningen.frame = CGRectMake(0, _posterView.frame.origin.y + _posterView.frame.size.height + 5, _leftView.frame.size.width, 35);

    _posterView.userInteractionEnabled = YES;
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(posterClick)];
    singleTap.numberOfTapsRequired = 1;
    [_posterView addGestureRecognizer:singleTap];
    [_leftView addSubview:_posterView];

    CGFloat rightHeight = 0.f;
    _rightView.frame = CGRectMake(_leftView.frame.origin.x + _leftView.frame.size.width + 5, _leftView.frame.origin.y, self.view.frame.size.width - (_leftView.frame.size.width + _leftView.frame.origin.x) - 15, 1);

    _lblRegie.frame = CGRectMake(0, rightHeight, 48, 16);


    NSMutableString* text = [[NSMutableString alloc]init];
    NSArray*  arr = _currentMovie.directorList;



    etc.....
}

1 个答案:

答案 0 :(得分:0)

您的应用可能存在内存泄漏问题。尝试使用 imageWithContentsOfFile 而不是 imageNamed

_imgView.image =  [UIImage imageWithContentsOfFile:imagePath];

使用ARC进行内存泄漏的另一种可能性是使用单独的线程而不设置自动释放池。检查此链接: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html