2011-11-10 19 views

risposta

15

Si può usare per informare che il vostro AppKit NSView sottoclasse -drawRect: metodo di istanza può essere chiamato da un thread secondario.

È 10,6+. Quando/se AppKit esegue il rendering delle viste in modo asincrono, -drawRect: viene eseguito utilizzando i blocchi simultanei e il tuo -drawRect: verrà chiamato da un thread secondario. Ciò significa che l'implementazione della sottoclasse deve essere protetta da thread (per compatibilità, è disabilitata per impostazione predefinita).

Vedere anche -[NSView setCanDrawConcurrently:] per dettagli, perché ci sono poche cose necessarie per abilitare effettivamente questo comportamento. Inoltre, non dovrebbe implicare che AppKit è protetto da thread o che le sue sottoclassi NSView sono progettate per supportare questa funzionalità. È progettato per il il tuo disegno pesante.

+2

Si noti che a partire da OS X 10.8 e iOS 6.0, l'impostazione della nuova proprietà 'drawsAsynchronously' sul layer della vista può fornire prestazioni sufficienti senza la complicazione di' drawRect: 'thread-safe. Su OS X dovrai utilizzare una vista con strato di livello per usare 'drawsAsynchronously'. –

+0

@robmayoff bel suggerimento +1. hai per caso misurato questo o hai trovato una buona recensione? sto scrivendo per un po 'i renderer concomitanti thread-safe. Immagino che sia un'area che molte persone vorrebbero evitare :) – justin

+1

Non ci ho giocato. Il video * Ottimizzazione della grafica 2D e delle animazioni * di [WWDC 2012] (https://developer.apple.com/videos/wwdc/2012/) lo discute, a partire da 31m24s. –

Problemi correlati