UIImage内存没有取消分配VM:ImageIO_JPEG_DATA?

时间:2014-05-09 22:09:16

标签: ios objective-c memory uicollectionview

我一次在屏幕上有多个水平滚动的集合视图。他们都充满了图像。所有这些图像都是通过Parse api在后台加载的。我正在运行Instrument的分配和匿名VM:ImageIO_JPEG_DATA类占用了大部分正在使用的内存。应用程序中的所有内存大约等于40,然后此类别超过55,这使得总数在100左右。该类别永远不会下降,只是保持一致。如何从我的集合视图中的图像中释放这些内存?

以下是我的收藏视图的代码:

.m用于我的集合视图控制器

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];

    if (cell) {
        [cell.loadingImageIndicator setHidden:NO];
        [cell.loadingImageIndicator startAnimating];

        id photo = [self.collectionViewPhotos objectAtIndex:indexPath.item];

        if ([photo isKindOfClass:[PFObject class]]) {
            PFObject *photoObject = (PFObject *)photo;

            PFFile *imageFile = [photoObject objectForKey:kPhotoPictureKey];
            [cell.cellImage setFile:imageFile];

            [cell.cellImage loadInBackground:^(UIImage *image, NSError *error) {
                [cell.cellImage setContentMode:UIViewContentModeScaleAspectFill];
                [cell.loadingImageIndicator stopAnimating];
                [cell.loadingImageIndicator setHidden:YES];
            }];
        } else if ([photo isKindOfClass:[UIImage class]]) {
            [cell.cellImage setImage:photo];
            [cell.cellImage setContentMode:UIViewContentModeScaleAspectFill];
        }
    }

    return cell;
}

.m for CollectionViewCell

- (void)prepareForReuse
{
    self.cellImage.image = nil;
}

- (void)dealloc
{
    self.cellImage = nil;
}

编辑:乐器照片 enter image description here

1 个答案:

答案 0 :(得分:4)

我在照片库类型的应用程序中遇到了同样的问题,并且在所谓的ImageIO_JPEG_DATA类别中遇到了相同的问题,累积并保留了#34; live"永远,导致我的应用程序内存不足。奇怪的是,这只发生在我正在测试的iPad上,而不是在ios模拟器上(没有显示内存问题)。

Brian的建议(下面)为我工作。我的应用程序最初使用的是一个数组,其中每个元素都包含一个UIImage。这些图像用于各种UIScrollViewControllers。

当我需要加载图片时,如果我使用

[UIImage imageWithContentsOfFile:path]

而不是直接引用我的数组中的UIImage,内存问题(由ImageIO_Malloc正在进行的一些无法解释的缓存引起)消失了,ImageIO_JPEG_DATA分配停止堆积并被释放。

在我自己的无数年里,我永远不会想出这个解决方案,所以感谢Brian。