ios - UIImage 内存未释放 VM : ImageIO_JPEG_DATA?

标签 ios objective-c memory uicollectionview

我一次在屏幕上有多个水平滚动的 Collection View 。它们都充满了图像。所有这些图像都通过 Parse api 在后台加载。我正在运行 Instrument 的分配和匿名 VM:ImageIO_JPEG_DATA 类别占用了大部分正在使用的内存。应用程序中的所有内存大约等于 40,然后这个类别超过 55,总计大约 100。那个类别根本不会下降,只是保持一致。我可以做些什么来从我的收藏 View 中的图像中释放这些内存?

这是我的收藏 View 的代码:

.m 用于我的 Collection View Controller

- (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

最佳答案

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

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

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

[UIImage imageWithContentsOfFile:path]

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

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

关于ios - UIImage 内存未释放 VM : ImageIO_JPEG_DATA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574698/

相关文章:

iOS subview 按钮导致应用程序崩溃

java - 默认堆栈大小是多少,它可以增长,它如何与垃圾收集一起工作?

c# - 溢出我的内存,强制垃圾收集器?

ios - 继承 UIImageView 并添加 UIControl

ios - 检查 CLLocation 是基于 GPS 还是基于蜂窝

ios - 在 uiwebview 中进行身份验证后调用 func

ios - 具有 n 个按钮的水平 ScrollView : [iOS]

c++ - 将 C++ 与 Cocoa 一起使用而不是 Objective-C?

ios - 如何使用 Instruments (Leaks) - Xcode 查找 C 或 C++ 代码泄漏?

php - 套接字资源 ID 溢出