最近私はPHAssetsを使用してプロジェクト内の古いアセットを置き換えました。しかし、私のアプリを使って画像を拡大すると、通常クラッシュしていました。 私は、デバッグモードを使用して、メモリの問題であることがわかりました。 は、私はコードがdrawInRectを使用して画像のサイズを変更するメモリ
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)]
実行し、それが自由にsettedされることはありませんが、でも、メソッドが終了すると思ったときに、メモリが50M程度増加します絵
+(UIImage*)scaleRetangleToFitLen:(UIImage *)img sWidth:(float)wid sHeight:(float)hei{
CGSize sb = img.size;;
if (img.size.height/img.size.width > hei/wid) {
sb = CGSizeMake(wid,wid*img.size.height/img.size.width);
}else{
sb = CGSizeMake(img.size.width*hei/img.size.height,hei);
}
if (sb.width > img.size.width || sb.height > img.size.height) {
sb = img.size;
}
UIImage* scaledImage = nil;
UIGraphicsBeginImageContext(sb);
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)];
scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
img = nil;
return scaledImage;
}
のサイズを変更するには、以下のコードを使用します。 幅と高さは304 * 228、画像の元のサイズは約3264 * 2448、返される画像は304 * 228です。つまり、私が最後に望んでいた実際の画像は単なる304 * 228サイズの画像ですが、 50 + M memory .. drawInRect:関数のメモリを解放する方法はありますか? (@autoreleasepoolは動作しません)
あなたのお答えいただきありがとうございます。コードは次のようなものです:(私は以下のコメントに私のコードを追加しています) – AFu
上のコードは私の答えです。今は "UIImage * ti = pv.image.image copy]; " "UIImage * ti = pv.image.image;"の代わりに、それは動作しません。それはコピーオブジェクトと元のオブジェクトが同じ画像にリンクされているようですが、画像を描画するとメモリが増えますが、元のオブジェクトはフリーに設定されていないため、メモリは解放されません。この種の状況(UIImageViewオブジェクトには35Mバージョンは必要ありませんが、描画メソッドを使用して35Mにします。描画後、35Mバージョンを小さなものに設定するにはどうすればいいですか) – AFu
3264 * 2448サイズのイメージ、私は最初に小さいバージョンを使用する必要がありますので、描画があまり増加しないように~~ – AFu