【问题标题】:CGImageRef Memory leak after release and autoreleasepoolCGImageRef 释放和自动释放池后内存泄漏
【发布时间】:2015-12-30 05:59:19
【问题描述】:

我正在尝试从本地内容实现显示图像,但由于某种原因内存不会被释放。

@autoreleasepool {
  ALAssetRepresentation *rep = [myasset defaultRepresentation];
  CGImageRef iref = [rep fullResolutionImage];
  UIImage *largeimage = [UIImage imageWithCGImage:iref scale:[UIScreen mainScreen].scale orientation:(UIImageOrientation)rep.orientation];
  CFRelease(iref);
  self.imageView.image = largeimage;
  largeimage = nil;
 }

按照建议,我习惯了

CGImageRelease(imageRef);

但我仍然有内存泄漏。之后我用一个

包装代码
@autoreleasepool {}

block 但这也不能解决我的问题。 我该怎么办?

【问题讨论】:

  • 你不应该在iref上打电话给CFRelease
  • 你如何确定你有内存泄漏?
  • 我正在使用带有泄漏选项的仪器。

标签: objective-c memory-management quartz-core


【解决方案1】:

我认为问题在于您将图像分配给图像视图时。您可以在将图像分配给图像视图之前尝试调整图像大小吗?

使用这个方法

- (UIImage *)resizeImage:(UIImage *)sourceImage toSize:(CGSize)newSize
{
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [sourceImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

【讨论】:

  • 内存略有差异,但还是有内存问题。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多