Apple заявляет в https://developer.apple.com/documentation/spritekit/skscenedelegate. :
Изменение объектов SpriteKit за пределами назначенных обратных вызовов (фоновая очередь или что-либо еще, не относящееся к основному потоку) может привести к проблемам, связанным с параллелизмом. Даже диспетчеризация работы основного потока асинхронно или в более позднее время сопряжена с риском, поскольку закрытие, скорее всего, будет выполнено вне периода времени, ожидаемого SpriteKit. Если вы столкнулись с ошибкой сегментации или другим типом сбоя, происходящим глубоко внутри инфраструктуры SpriteKit, велика вероятность того, что ваш код модифицирует объект SpriteKit вне обычных обратных вызовов.
Я использую распознаватели жестов для взаимодействия с объектами набора спрайтов. Простым примером может быть добавление SKAction к узлу, когда пользователь коснулся объекта:
func tapAction(gr:UITapGestureRecognizer) {
scene.childNode(withName: "balloon")!.run(SKAction.fadeOut(withDuration: 2))
}
Несмотря на то, что это "просто работает" на данный момент, я боюсь, что это не работает в более сложных случаях.
Есть ли намек от Apple, что это разрешено? Или мне действительно нужно отложить модификацию объекта SpritKit от действия жеста до назначенного обратного вызова?