4

アプリがラベルやその他のものを追加するために UIView を使用してカードを作成しているときに、coverFlow ビューを使用して iPhone 用のアプリを開発しています。次に、次のコードを使用して UIView を UIImage に変換します。

UIGraphicsBeginImageContext(imageView.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// returning the UIImage
return viewImage;

カバーフローを再描画するたびに、メモリ割り当てが大幅に増加し、coverFlow ビューの割り当てを解除しても減少しません。

追加したコードにメモリ リークがあると思いますが、どう思いますか?

4

2 に答える 2

2

提供したコードスニペットに明らかなメモリリークはありません。が原因でその操作をバックグラウンドスレッドで実行できなかったため、適切な場所に配置UIGraphicsBeginImageContext()する必要がありますNSAutoreleasePool(の戻り値UIGraphicsGetImageFromCurrentContext()は自動解放されます)。さらに情報がなければ、メモリリークがどこにあるのかを判断することは不可能です。最終的にviewImageオブジェクトを所有するオブジェクトを調べ、それを保持する場合はUIImageを適切に解放していることを確認することをお勧めします。

于 2009-11-21T19:29:28.323 に答える
0

drawViewHierarchyInRect:afterScreenUpdates:代わりに使用renderInContext:すると15 倍速くなります。

性能比較

この記事で比較を見ることができます。

また、これを行うための Swift 拡張機能を作成しました: https://stackoverflow.com/a/32042439/517707

于 2015-08-17T12:20:44.487 に答える