UIImage 内存未释放 VM:ImageIO_JPEG_DATA?

2024-04-22

我在屏幕上同时有多个水平滚动的集合视图。它们都充满了图像。所有这些图像都通过 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 代表 CollectionViewCell

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

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

Edit: Photo of instruments enter image description here


我在照片库类型的应用程序中遇到了同样的问题,并且遇到了与所谓的 ImageIO_JPEG_DATA 类别中的分配累积并永远保持“活动”相同的问题,导致我的应用程序内存不足。奇怪的是,这种情况只发生在我测试的 iPad 上,而不是在 ios 模拟器上(没有显示内存问题)。

布莱恩的建议(如下)对我有用。我的应用程序最初使用一个数组,其中每个元素除其他外还包含一个 UIImage。这些图像被用在各种 UIScrollViewController 中。

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

[UIImage imageWithContentsOfFile:路径]

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

我自己在数百万年之内永远不可能想出这个解决方案,所以感谢布莱恩。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIImage 内存未释放 VM:ImageIO_JPEG_DATA? 的相关文章

随机推荐