UIImageのリサイズでdrawInRectをfor文で回した時のメモリ解放タイミングについて
UIImageをリサイズするメソッドを作りました。画像の配列の要素を取り出して1つ1つリサイズしていく処理を書いた時に、メモリが上手く開放されず高画質な画像が何度もリサイズされるとメモリが足りなくなってしまいます。ARC環境で以下のようなコードを書きたい場合はどのようにメモリを開放するべきなのでしょうか?
「trimmedImage」が開放されていないようなので、trimmedImageを強制的に開放する手段がございましたらどなたかご教授願います。(※@autoreleasepoolの利用や、trimmedImage = nil;などもやってみましたが次のループまでに開放されておらず、総使用メモリが増えるのみでした。)
+ (void)cropImages: (NSArray *)images {
for (__weak UIImage *image in images) {
UIImage *resizedImage = [self cropRectImage:image];
}
}
+ (UIImage *)cropRectImage: (UIImage *)image {
float w = image.size.width;
float h = image.size.height;
CGRect rect;
if (h <= w) {
float x = w / 2 - h / 2;
float y = 0;
rect = CGRectMake(x, y, h, h);
}else {
float x = 0;
float y = h / 2 - w / 2;
rect = CGRectMake(x, y, w, w);
}
CGImageRef cgImage = CGImageCreateWithImageInRect(image.CGImage, rect);
UIImage *trimmedImage = [UIImage imageWithCGImage:cgImage];
CGSize newSize = CGSizeMake(320, 320);
UIGraphicsBeginImageContext(newSize);
UIImage *resizedImage = nil;
[trimmedImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
// TODO: ここでAutoReleaseされるはずだが... (http://vladimir.zardina.org/2010/05/resizing-uiimage-objects/)
resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
image = nil;
cgImage = nil;
return resizedImage;
}