2011-10-25 4 views
2

私はmono/iPhoneを初めて使い、UIScrollViewに配置された各ページのUIViewを使用してPDFドキュメントを表示するアプリケーションを開発しています。次のページにスクロールするたびに、新しいページ+/- 1だけがメモリに保持され、残りはフラッシュされます(UIViewではなくPDFページ)。多くのUIViewでメモリが不足していますが、モノクロでCGContextを解放することはできませんか?

しかし、デバイス上でデバッグすると、十分なページを反転させた後にアプリケーションがクラッシュし、アプリケーション出力にメモリ警告が表示されることがあります。

これは、UIViewでレンダリングされたビットマップがメモリからパージされていないと仮定しているため、Objective CでCGContextRelease()メソッドが見つかりましたが、これはMonoTouchにはありません。私が見つけることができる唯一の類似したメソッドはUIGraphicsクラスでしたが、現在のグラフィックスコンテキスト(それは確かに既存のものに設定することはできません)に関係するものだけを扱います。

UIViewでグラフィックスコンテキストをリリースするにはどうすればよいですか?これはまったく可能ですか?私の選択肢は何ですか?誰でも役立つことを願ってCGContextインスタンスは、解放された手動(Disposeが呼び出されたとき)、またはガベージコレクタ(GC)がファイナライザを実行するときにされたときに、これは非常識な私を回します。..

答えて

3

CGContextReleaseが自動的に呼び出されます。あなたがあなた自身のCGContextインスタンスを作成している場合

あなたはリソースが解放されたときに、あなたがを制御確保するためのDisposeを呼び出して(またはusingを使用する)必要があります。そうしないと、GCが収集されるまでに時間がかかりすぎて、メモリ不足状態に陥る可能性があります。

アプリケーションで作成したIDisposableインスタンス(つまり、問題が他のものと関連する可能性がある)についても同じアドバイスが保持されます。

注:UIViewを再利用していますか?またはそれらの除去/廃棄?

+0

私はページあたり1つの「UIView」を持っていました。キャッシュされたグラフィックスを削除して、これらのビューをすべて引き継ぐことができました。しかし、 'CGContext.Dispose()'や手作業によるガベージコレクションはまったく機能しませんでした。私は自分自身を叩いてしまいました.3つの 'UIView'を使っています。すべてがスムーズに機能します。 – Arne

+0

あなたが作成していたページ数/ UIViewを知らなくても辛いですが、それがあなたの主な記憶問題だったと思います。いずれにせよ、それらを再利用することは(あなたが他のアプリとデバイスを共有しているので)すばらしいことです。あなたはそれが働いてうれしい:-) – poupou

関連する問題