更新このコードは、実際には問題のある場所ではありません。すべてのCoreGraphics行をコメントアウトし、結果として配列の最初の画像を返すことでクラッシュの発生を防ぐことはできないため、さらに上流を調べる必要があります。
私はこれを75msのNSTimerで実行しています。480x360の画像で完全に動作し、クラッシュすることなく1日中実行されます。
しかし、1024x768の画像を送信すると、約20秒後にクラッシュし、メモリ不足の警告がいくつか表示されます。
どちらの場合も、Instrumentsは完全に通常のメモリ使用量を示します。フラットな割り当てグラフ、1メガバイト未満のライブバイト、常にリークはありません。
どうしたの?Core Graphicsは、どういうわけか、表示せずにメモリを使いすぎていませんか?
また、言及する価値があります。(NSMutableArray *)imgsにはそれほど多くの画像はありません。通常は3つ、場合によっては2つまたは4つです。関係なくクラッシュします。2つしかない場合は、クラッシュが少し少なくなります。
- (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;
}