2

約15000ピクセルのサイズのビューをCocoaで作成するのが賢明ですか?(もちろん、このビューのごく一部のみが一度に表示されますNSScrollView

InterfaceBuilderのサイズには10000ピクセルの制限があります。これは人為的な制限ですか、それともその背後にある正当な理由がありますか?

巨大なビューを作成してNSScrollView/Quartzに効率的にレンダリングすることを心配させる必要がありますか(私のビューはで要求された領域内にプログラムで描画されますdrawRect)、または過度のメモリ使用量やその他の問題のリスクがありますか?(たとえば、OS Xはいつでもビュー全体のビットマップをビデオメモリにキャッシュしようとすることができますか?)

4

2 に答える 2

1

レイヤーでサポートされていない限り、ビューにはバッキング ストアがありません。ウィンドウにはバッキング ストアがあるため、ビューを表示するために使用されるメモリの量はウィンドウのサイズに制限されます。

ですから、答えはイエスです。ビューを好きなだけ大きくしてください。

(もちろん、ビューで行う描画を、渡された rect に制限する必要がありdrawRect:ます。そうしないと、目に見えない描画を行うのに多くの時間を浪費することになります。)

于 2009-07-30T23:41:53.197 に答える
0

Cocoa がビュー全体をメモリにキャッシュしようとすると、問題が発生します。

10000 * 10000 = 100,000,000
* 4 = 400,000,000

これは、 1 つのビューの生の RGBA ピクセルで 400 MBです。本当に悲観的になるには、NSView がそれをダブル バッファリングしていると仮定します。この場合、メモリ使用量は 2 倍の 800 MB になります。

最悪の場合、ユーザーは 1 GB の RAM を搭載した古い Mac mini でアプリを実行していますが、そのうちの 80% を使用したばかりです。システムは確かにこの時点よりも前にページングを開始し、システムが耐えられないほど遅くなります.

一方、これは私が考えることができる最も簡単な実装方法なので、試してみて、Activity Monitor がメモリ使用量について何を示しているかを確認してください。高すぎる場合は、スクロール ビューとクリップ ビューのさまざまなオプションを変更してみてください。それがうまくいかない場合は、独自のスクローラーを作成して偽造する以外に考えられません。

于 2009-07-30T23:33:58.643 に答える