【发布时间】:2023-03-24 19:21:01
【问题描述】:
我有一个内存泄漏,我只是不知道如何解决。
这是泄漏代码:
[newImg release];
CGColorSpaceRef d_colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(Data, width,
height,
8, 4*width,
d_colorSpace,
kCGImageAlphaNoneSkipFirst);
UIGraphicsPushContext(context);
CGImageRef new_img = CGBitmapContextCreateImage(context);
UIImage * convertedImage = [[UIImage alloc] initWithCGImage:
new_img];
CGImageRelease(new_img);
CGContextRelease(context);
CGColorSpaceRelease(d_colorSpace);
newImg = convertedImage;
我修改存储在 Data 中的像素信息,然后使用此方法从 Data 创建一个 UIImage(作为无符号字符数组)
xcode 工具告诉我这里有泄漏:
CGImageRef new_img = CGBitmapContextCreateImage(context);
这里:
UIImage * convertedImage = [[UIImage alloc] initWithCGImage:
new_img];
虽然我释放了他们两个:(有人可以告诉我如何解决这个问题吗?
提前致谢^-^
【问题讨论】:
-
你在哪里发布convertedImage?还有,为什么你以后用newImg的时候要在最上面放呢?
-
newImg 是一个 istance 属性,因此它可能包含旧图像,这就是我在第一行释放它的原因,因为我用转换后的图像覆盖它。转换后的图像不能被释放,因为它将存储在 newImg 中
-
你误解了 Objective C 中内存管理的工作原理,你应该只释放你分配的对象。请看我下面的帖子
-
你永远不会调用 UIGraphicsPopContext()
-
如果newImg是一个实例属性,比[newImg release];不应该工作,因为它应该是 self.newImg;还是我错了?
标签: iphone ios xcode memory-leaks cgimage