【发布时间】:2025-11-25 00:50:02
【问题描述】:
UPDATE 这段代码其实不是问题所在;注释掉所有 CoreGraphics 行并返回数组中的第一个图像作为结果并不能防止崩溃的发生,所以我必须往上游看。
我在 75 毫秒的 NSTimer 上运行它。它可以完美地处理 480x360 图像,并且可以运行一整天而不会崩溃。
但是当我向它发送 1024x768 的图像时,它会在大约 20 秒后崩溃,并给出几个内存不足的警告。
在这两种情况下,Instruments 都显示出绝对正常的内存使用情况:一个扁平的分配图,少于 1 兆字节的活动字节,始终没有泄漏。
那么,发生了什么? Core Graphics 是否以某种方式使用了过多的内存而不显示它?
另外值得一提的是:(NSMutableArray*)imgs 中的图像并不多——通常是三个,有时是两个或四个。无论如何都会崩溃。只有两个时,崩溃的速度会稍微慢一些。
- (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 imageNamed:]吗? -
我没有在任何地方使用 [UIImage imageNamed:] -- 所有图像都是从相机捕获并发送到返回 NSMutableArrays 图像的 imageBuffer 类。它在没有崩溃日志输出的情况下崩溃,但在设备日志中看起来该进程正在使用 62582 rpages。
标签: iphone memory-management memory-leaks uiimage core-graphics