UPDATE这段代码其实不是问题所在;注释掉所有 CoreGraphics 行并返回数组中的第一个图像作为结果并不能防止崩溃的发生,所以我必须往上游看。
我在 75ms 的 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;
}