Iphone CoreGraphics内存警告和崩溃;仪器显示没有内存泄漏

Iphone CoreGraphics内存警告和崩溃;仪器显示没有内存泄漏,iphone,memory-management,memory-leaks,uiimage,core-graphics,Iphone,Memory Management,Memory Leaks,Uiimage,Core Graphics,更新这段代码实际上不是问题所在;注释掉所有CoreGraphics行并返回数组中的第一个图像作为结果并不能防止崩溃的发生,因此我必须向上游看得更远 我在75毫秒的NSTimer上运行这个。它可以完美地处理480x360图像,并且可以全天运行而不会崩溃 但当我向它发送1024x768的图像时,它会在大约20秒后崩溃,并发出几次内存不足警告 在这两种情况下,仪器都显示了绝对正常的内存使用情况:一个平面分配图,活动字节数不到1兆,整个时间都没有泄漏 那么,发生了什么事?核心图形是否在没有显示的情况下占

更新这段代码实际上不是问题所在;注释掉所有CoreGraphics行并返回数组中的第一个图像作为结果并不能防止崩溃的发生,因此我必须向上游看得更远

我在75毫秒的NSTimer上运行这个。它可以完美地处理480x360图像,并且可以全天运行而不会崩溃

但当我向它发送1024x768的图像时,它会在大约20秒后崩溃,并发出几次内存不足警告

在这两种情况下,仪器都显示了绝对正常的内存使用情况:一个平面分配图,活动字节数不到1兆,整个时间都没有泄漏

那么,发生了什么事?核心图形是否在没有显示的情况下占用了太多内存

同样值得一提的是,(NSMutableArray*)IMG中没有那么多图像——通常是三个,有时是两个或四个。不管怎样。只有两辆车时,撞车时间会稍微短一些

- (UIImage*) imagefromImages:(NSMutableArray*)imgs andFilterName:(NSString*)filterName {

    UIImage *tmpResultant = [imgs objectAtIndex:0];

    CGSize s = [tmpResultant size];

    UIGraphicsBeginImageContext(s);

    [tmpResultant drawInRect:CGRectMake(0, 0, s.width, s.height) blendMode:kCGBlendModeNormal alpha:1.0];

    for (int i=1; i<[imgs count]; i++) { [[imgs objectAtIndex:i] drawInRect:CGRectMake(0, 0, s.width, s.height) blendMode:kCGBlendModeMultiply alpha:1.0]; }

    tmpResultant =  UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return tmpResultant;
}
-(UIImage*)imagefrommages:(NSMutableArray*)imgs和filterName:(NSString*)filterName{
UIImage*tmpresltant=[imgs objectAtIndex:0];
CGSize=[tmpresltant size];
UIGraphicsBeginImageContext;
[TMPRESSLTANT drawInRect:CGRectMake(0,0,s.宽度,s.高度)混合模式:kCGBlendModeNormal alpha:1.0];

对于(int i=1;i我觉得问题不在您显示的代码范围内。屏幕上显示的图像在应用程序内存之外有一个备份存储,即每像素宽度*高度*字节数。如果备份存储过多,您还会收到内存警告和应用程序终止

您可能需要在此处进行优化,以创建这些图像的较小优化版本以供显示,或允许发布备份存储。此外,为某些未更改的层启用光栅化,以及直接将层内容设置为CGImage(而不是使用UIImage)也会有所帮助


您应该制作一个示例项目,演示没有其他代码的问题,并查看内存是否仍然不足。但我怀疑您会发现,仅凭所显示的代码,您将无法复制isse,因为它位于其他位置。

崩溃日志显示了多少内存?您是否使用了
[UIImage ImageName::
?我没有使用[UIImage ImageName:]anywhere--所有图像都从相机捕获并发送到imageBuffer类,该类返回NSMutableArrays图像。它在没有崩溃日志输出的情况下崩溃,但在设备日志中,该过程似乎使用了62582 rpages。这完全正确;我减少了存储的
UIImage
s的数量,从而停止了CRA他说。为了克服这一限制,我将尝试将图像存储为
UIImageJPEGRepresentation
s,然后根据需要将它们重新制作成
[UIImageWithData:
。希望速度足够快。