0

これはやや仮説的な質問ですが、将来のある時点でこの状況が発生することは想像できます。一度だけレンダリングする必要がある非常に複雑な UIView の階層があると仮定しましょう。また、いったん描画されたら、親ビューの下にある情報 (UIImages、ラベル、カスタム ビュー、座標など) をそれ以上使用しないと仮定しましょう。それらを保持するのではなく、再描画を回避しながら、使用する余分なメモリをすべて解放するという考えです。結果は、オフスクリーン バッファに描画してからオンスクリーンにプッシュした場合と同じになります。UIView/CGLayer をそのまま使用してこれを達成することは可能ですか、それとも親 CGLayer のコンテンツを UIImage に変換する唯一のオプションですか?

ちょっと興味があるんだけど。ほとんどの状況で、いくつかの余分なビューを保持するオーバーヘッドは無視できると思いますが、メモリはメモリであり、ビットマップの割り当て以外に公式ドキュメントで何も見つけることができませんでした.

ありがとう!

4

2 に答える 2

0

これは非常に危険なことだと思います。通知が表示されたり、画面の上部にある通話アクティブな緑色のバーによってビューが影響を受けたりするなど、ビューを再描画する必要がある、あなたの制御を超えたことが発生する可能性があります。

階層内にこれほど多くのビューがある場合、他にも多くのパフォーマンスの問題が発生するため、再描画後に数バイトを節約するだけで問題が最小限になることをお勧めします。

于 2011-09-17T21:23:20.063 に答える
0

-(void)drawRect:(CGRect)rect;ブール値フラグに従ってその画像を画面に移動する前に、オフスクリーンに一度だけ描画する方法をオーバーライドすることを考えることができますが、それは巨大なバグにつながる可能性があり、適切に設計する必要があります。もう1つのことは-(void)layoutSubviews;、最初のものをオーバーライドした場合にオーバーヘッドになる可能性があると考えて、 もオーバーライドする可能性があることです...

于 2011-09-17T21:03:04.333 に答える