En SpriteKit, ¿TouchesBegan se ejecuta en el mismo hilo que el método de actualización de SKScene?

En la documentation de Apple, aquí, Procesamiento de escena avanzado , describe el método de update y cómo se representa una escena, pero no menciona cuándo se procesa la input. No está claro si esto está en el mismo subprocess que el ciclo de representación, o si es concurrente con él.

Si tengo un object que actualizo tanto del método de update SKScene como del método touchesBegan (en este caso, de un SKSpriteNode ), ¿tengo que preocuparme por sincronizar los dos accesos a mi object?

Entonces, después de unos días sin respuesta, instalé algunos experimentos. Por cierto, estas testings se ejecutan en el simulador y no en un dispositivo real, pero creo que sería lo mismo.

Primera testing, establecí un punto de interrupción en el depurador en touchesBegan y miré el rastro de la stack. Parece que los touchesBegan llamada se llaman desde el primer hilo y desde el bucle main , el mismo lugar que el rest de la lógica, por lo que esto se ve bien para un enfoque de un solo hilo.

Segunda testing, he anulado los diversos methods en la escena mencionada en el enlace Procesamiento de escena avanzado anterior y agregado declaraciones de printing para mostrar el nombre de cada function llamada. Luego agregué una statement de printing al método touchesBegan .

Al ejecutar la aplicación, la salida fue:

 update didEvaluateActions didSimulatePhysics didApplyConstraints didFinishUpdate touchesBegan in scene update didEvaluateActions didSimulatePhysics didApplyConstraints didFinishUpdate update 

y este patrón se repitió cada vez que hice clic.

Ninguna cantidad de clic me dio nada más que touchesBegan a touchesBegan entre the didFinishUpdate (es decir, el final de un ciclo) y la update (el comienzo del siguiente).

Conclusión: toca el procesamiento que ocurre en el bucle principal antes de llamar al método de actualización. Por lo tanto, no es necesario sincronizar resources entre los dos methods.