2011-11-10 8 views

Respuesta

15

Se puede utilizar para informar de que su AppKit NSView subclase -drawRect: método de instancia puede ser llamado desde un subproceso secundario.

Es 10.6+. Cuando/si AppKit representa vistas de forma asincrónica, -drawRect: se realiza utilizando bloques concurrentes, y su -drawRect: se invocará desde una secuencia secundaria. Esto significa que la implementación de su subclase debe ser segura (por compatibilidad, está deshabilitada de manera predeterminada).

Consulte también -[NSView setCanDrawConcurrently:] para obtener más información, porque se necesitan pocas cosas para permitir realmente este comportamiento. Además, no debe implicar que AppKit es seguro o que sus subclases NSView están diseñadas para admitir esta funcionalidad. Está diseñado para su dibujo pesado.

+2

Tenga en cuenta que a partir de OS X 10.8 y iOS 6.0, establecer la nueva propiedad 'drawsAsynchronously' en la capa de la vista puede proporcionar un rendimiento suficiente sin la complicación de hacer' drawRect: 'thread-safe. En OS X, necesitará usar una vista de capa para usar 'dibuja de forma asincrónica'. –

+0

@robmayoff buen consejo +1. ¿Has medido esto por casualidad o has encontrado un buen artículo? He estado escribiendo renderizadores concurrentes threadsafe por un tiempo. me imagino que es un área que mucha gente querría evitar :) – justin

+1

No he jugado con eso. El video * Optimización de gráficos 2D y rendimiento de animación * de [WWDC 2012] (https://developer.apple.com/videos/wwdc/2012/) lo analiza, comenzando alrededor de 31m24s. –

Cuestiones relacionadas