Domanda

È saggio creare viste in Cocoa che abbiano dimensioni intorno a 15000 pixel? (ovviamente solo una piccola parte di questa vista sarà visibile alla volta in un NSScrollView )

Interface Builder ha un limite di 10000 pixel di dimensione. È una limitazione artificiale o c'è una buona ragione dietro di essa?

Devo solo creare una vista enorme e lasciare che NSScrollView / Quartz si preoccupi di renderlo in modo efficiente (la mia vista è disegnata a livello di codice nell'area richiesta in drawRect ) o rischio eccessivo utilizzo della memoria e altri problemi? (ad esempio OS X potrebbe tentare di memorizzare nella cache la bitmap dell'intera vista in qualsiasi momento?)

È stato utile?

Soluzione

Le viste non hanno negozi di supporto, a meno che non siano supportate da livelli. La finestra è quella che ha l'archivio di backup, quindi la quantità di memoria utilizzata per visualizzare la vista è limitata alle dimensioni della finestra.

Quindi, la risposta è sì. Vai avanti e rendi le tue viste grandi quanto vuoi.

(Ovviamente, vorrai limitare il disegno che esegui nella vista al retto passato in drawRect: o perderai molto tempo a fare disegni invisibili.)

Altri suggerimenti

Bene, se Cocoa tenta di memorizzare nella cache l'intera vista in memoria, sarebbe un problema:

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

Sono 400 MB in pixel RGBA non elaborati per una vista. Se vogliamo essere davvero pessimisti, supponiamo che NSView esegua il doppio buffering per te, nel qual caso il tuo utilizzo della memoria raddoppia a 800 MB.

Nel peggiore dei casi, l'utente esegue l'app su un vecchio Mac mini con 1 GB di RAM, di cui hai appena utilizzato l'80%. Il sistema inizierà sicuramente il paging prima di questo punto, rendendo il loro sistema insopportabilmente lento.

D'altra parte, è il modo più semplice di implementarlo che io possa pensare, quindi dico provalo e vedi cosa dice Activity Monitor sull'utilizzo della memoria. Se è troppo alto, prova a cambiare varie opzioni della vista di scorrimento e della vista clip; se non funziona, non riesco a pensare ad altro che creare i tuoi scroller e falsificarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top