Quindi dopo alcuni giorni senza risposta ho impostato alcuni esperimenti. A proposito, questi test sono eseguiti sul simulatore e non su un dispositivo reale, ma penso che sarebbe lo stesso.
Primo test, ho impostato un punto di interruzione nel debugger su touchesBegan
e ho esaminato la traccia dello stack. Sembra che touchesBegan
sia chiamato dal primo thread e dal ciclo main
, lo stesso posto del resto della logica, quindi questo sembra buono per un approccio con thread singolo.
Secondo test, ho annullato i vari metodi nella scena menzionata nel collegamento Elaborazione scena avanzata in alto e ho aggiunto istruzioni di stampa per mostrare il nome di ogni funzione chiamata. Quindi ho aggiunto una dichiarazione di stampa al metodo touchesBegan
.
Sul esecuzione l'applicazione, l'uscita è stata:
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
touchesBegan in scene
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
update
e questo modello è stato ripetuto ogni volta che ho cliccato.
Nessuna quantità di click mi ha dato altro che touchesBegan
essere chiamato tra l'didFinishUpdate
(vale a dire, la fine di un ciclo) e il update
(l'inizio del prossimo).
Conclusione: l'elaborazione dei tocchi avviene nel ciclo principale prima che venga richiamato il metodo di aggiornamento. Non è quindi necessario sincronizzare le risorse tra i due metodi.
Non sono completamente sicuro, ma sono sicuro al 99% che sarà nel thread principale poiché gli eventi di tocco vengono ricevuti dal ciclo di esecuzione principale. – NobodyNada
Penso che possiamo farlo al 99,9% ora. Grazie per il commento - è stato abbastanza buono per lavorare con. – rghome