Pregunta

¿Es aconsejable crear vistas en Cocoa que tengan dimensiones alrededor de 15000 píxeles? (por supuesto, solo una pequeña parte de esta vista estará visible a la vez en un NSScrollView )

Interface Builder tiene un límite de 10000 píxeles de tamaño. ¿Es esto una limitación artificial o hay una buena razón detrás de esto?

¿Debería crear una vista enorme y dejar que NSScrollView / Quartz se preocupe por representarlo de manera eficiente (mi vista se dibuja mediante programación dentro del área solicitada en drawRect ) o me arriesgo demasiado uso de memoria y otros problemas? (por ejemplo, ¿podría OS X intentar almacenar en caché el mapa de bits de la vista completa en cualquier momento?)

¿Fue útil?

Solución

Las vistas no tienen tiendas de respaldo, a menos que estén respaldadas por capas. La ventana es lo que tiene el almacén de respaldo, por lo que la cantidad de memoria utilizada para mostrar la vista se limita al tamaño de la ventana.

Entonces, la respuesta es sí. Continúa y haz tus vistas tan grandes como quieras.

(Por supuesto, querrás limitar el dibujo que haces en la vista al rect pasado en drawRect: o perderás mucho tiempo haciendo dibujos invisibles).

Otros consejos

Bueno, si Cocoa intenta almacenar en caché toda la vista en la memoria, eso sería un problema:

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

Eso es 400 MB en píxeles RGBA sin procesar para la vista una . Si queremos ser realmente pesimistas, supongamos que NSView tiene un doble búfer para usted, en cuyo caso el uso de la memoria se duplica a 800 MB.

En el peor de los casos, su usuario está ejecutando su aplicación en una Mac mini con 1 GB de RAM, de la cual acaba de usar el 80%. Sin duda, el sistema comenzará la paginación mucho antes de este punto, lo que hará que su sistema sea insoportablemente lento.

Por otro lado, es la forma más fácil de implementarlo que se me ocurra, así que digo que intente y vea lo que Activity Monitor dice acerca de su uso de memoria. Si es demasiado alto, intente cambiar varias opciones de la vista de desplazamiento y la vista de clip; Si eso no funciona, no puedo pensar en otra cosa que hacer tus propios scrollers y falsificarlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top