Как реализовать очень большой вид прокрутки в Какао - PullRequest
2 голосов
/ 31 июля 2009

Разумно ли создавать в Какао виды с размерами около 15000 пикселей? (конечно, только небольшая часть этого вида будет видна одновременно в NSScrollView)

Интерфейсный конструктор имеет ограничение в размере 10000 пикселей. Это искусственное ограничение или есть веская причина?

Должен ли я просто создать огромный вид и позволить NSScrollView / Quartz беспокоиться о его эффективном рендеринге (мой взгляд рисуется программно в области, запрошенной в drawRect), или я рискую чрезмерно использовать память и другие проблемы? (например, может ли OS X в любое время попытаться кэшировать растровое изображение всего представления в видеопамяти?)

Ответы [ 2 ]

1 голос
/ 31 июля 2009

Представления не имеют резервных хранилищ, если они не являются слоистыми. Окно - это то, что имеет резервное хранилище, поэтому объем памяти, используемый для отображения представления, ограничен размером окна.

Итак, ответ - да. Идите вперед и сделайте ваши взгляды такими большими, как вы хотите.

(Конечно, вы хотите ограничить чертеж, который вы делаете в виде, прямоугольником, переданным в drawRect:, или вы будете тратить много времени на рисование невидимым.)

0 голосов
/ 31 июля 2009

Хорошо, если Какао попытается кэшировать весь вид в памяти, это будет проблемой:

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

Это 400 МБ необработанных пикселей RGBA для просмотра один . Если мы хотим быть действительно пессимистичными, предположим, что NSView выполняет двойную буферизацию для вас, и в этом случае использование вашей памяти удваивается до 800 МБ.

В худшем случае ваш пользователь запускает ваше приложение на старом Mac mini с 1 ГБ ОЗУ, из которых вы только что использовали 80%. Система, безусловно, начнет пейджинг до этого момента, что сделает их систему невыносимо медленной.

С другой стороны, это самый простой способ его реализации, о котором я только могу подумать, поэтому я говорю, попробуйте и посмотрите, что Activity Monitor говорит об использовании вашей памяти. Если оно слишком высокое, попробуйте изменить различные параметры просмотра прокрутки и просмотра клипа; если это не сработает, я не могу думать ни о чем другом, кроме как создавать свои собственные скроллеры и подделывать их.

...