Birkaç gün sonra cevapsız bir şekilde bazı deneyler kurdum. Bu arada, bu testler gerçek bir cihaz üzerinde değil, simülatörde çalıştırılıyor, ama aynı olacağını düşünüyorum.
İlk sınama, hata ayıklayıcıda touchesBegan
üzerinde bir kesme noktası belirledim ve yığın izlemeye baktım. touchesBegan
'un ilk iş parçacığından ve main
döngüsünden - mantığın geri kalanıyla aynı yerde - çağrıldığı anlaşılıyor, bu nedenle bu, singe-threaded yaklaşımı için iyi görünüyor.
İkinci sınama, yukarıdaki Gelişmiş Sahne İşleme bağlantısında belirtilen sahnedeki çeşitli yöntemleri geçersiz kıldım ve çağrılan her işlevin adını göstermek için yazdırma ifadeleri ekledim. Sonra touchesBegan
yöntemine bir yazdırma bildirimi ekledim.
app çalışan, çıktı idi:
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
touchesBegan in scene
update
didEvaluateActions
didSimulatePhysics
didApplyConstraints
didFinishUpdate
update
ve Tıkladım'ı zaman bu model tekrarlandı.
tıklayarak Hiçbir miktarda bana didFinishUpdate
arasına çağrılan touchesBegan
daha başka bir şey verdi (yani, bir döngünün sonu) ve update
(sonraki başlangıcı). Sonuç: güncelleme yöntemi çağrılmadan önce işlemin ana döngüsünde gerçekleştiği görülür. Bu nedenle, iki yöntem arasındaki kaynakları senkronize etmek gerekli değildir.
Tamamen emin değilim, ancak dokunma olayları ana çalışma döngüsü tarafından alındığı için ana iş parçasında olacağından% 99 eminim. – NobodyNada
Sanırım şimdi bunu% 99.9 yapabiliriz. Yorum için teşekkürler - ile çalışmak için yeterince iyi oldu. – rghome