1
を組み合わせることで、メモリの警告を受信:は、私は次のコードで2 UIImageを結合しようとする2 UIImage
- (void)combineImage:(UIImage *)image WithFrame:(CGRect)frame Completion:(ImageProcessorCompletionBlock)block {
__weak typeof(self) wSelf = self;
dispatch_async(_queue, ^{
if (wSelf) {
typeof(wSelf) sSelf = wSelf;
UIGraphicsBeginImageContextWithOptions(sSelf.originalImage.size, NO, 0.0);
[sSelf.originalImage drawInRect:CGRectMake(0, 0, sSelf.originalImage.size.width, sSelf.originalImage.size.height)];
[image drawInRect:frame];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
if (block) {
block(result);
}
});
}
});
}
私はメモリの使用量をチェックアウトする際に動作しますが、それは私を怖がらせました。メソッドを実行するたびにメモリが立ち上がり、決して解放されません。時々私はメモリの警告を受け取ります。なぜ誰かが私に教えて、問題を解決するための解決策を教えてくれますか?どうもありがとう!
あなたの 'if(block)'チェックは無関係ですが、メソッド本体全体を包含する必要があります。呼び出し元が結果を気にしない場合は、作業を行う上で意味がありません。 – rmaddy
あなたのイメージはサイズが大きいかもしれませんか? – iphonic
画像は大きくなります(エンベロープ計算の後ろには4 x幅x縮尺x高さx縮尺です;たとえば、3倍の縮尺で1000 x 1000を使用すると約36mbかかることがあります)。あなたのメモリが解放されていない場合は、 "デバッグメモリグラフ"機能を使用して、リリースされるべきオブジェクトを特定し、意図しない強い参照が残っているかどうかを確認します。しかし、上記のコードは、再リリースされていないメモリの問題の原因になる可能性は低いです。 – Rob