4

2448 X 2448 ピクセルの画像でこのコードを実行しています。fullScaleViewも 2448 X 2448 ( fullScreenView Rect:{{0, 0}, {2448, 2448}}) です。メソッドが完了すると、アプリのメモリは 49.7MB から 240MB から 172MB にジャンプします。172MBのままです。この後、アプリがまだそれほど高いメモリフットプリントで実行されているようには見えませんrenderInContext。どこでどのようにリリースを強制する必要がありますか? (iOS 7 XCode 5 ARC)。

UIGraphicsBeginImageContextWithOptions(fullScaleView.bounds.size, fullScaleView.opaque, 1.0);
[fullScaleView.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
4

1 に答える 1

3

画像が巨大であるため、メモリがジャンプします。もう必要ないことが確実な場合は、返された画像を autorelease ブロックで使用している場所をラップする必要があります。

例えば

@autoreleasepool {
    UIImage *theReturnedImage = yourmethodthatreturnstherenderedimage();
    // do stuff with your image
}

残念ながら、イメージの使用が完了するまで、スペースが占有されるため、すぐに解放する必要があります。

于 2013-12-31T20:06:46.057 に答える