runblock retiene auto reference causa memory problema dealloc

Aquí está mi código:

ship.runAction(SKAction.waitForDuration(5), completion: { self.ship.flyStraight()//retain self }) 

Después de varios días buscando en google los problemas de memory, finalmente descubrí que tenía un auto retener en este bloque. Cuando creo la nueva escena antes de que el bloque se haya ejecutado, la function deinit no se llamará porque la reference en el bloque.

Debo escribir de esta manera en mi juego, y qué puedo hacer para evitar este problema. ¿Qué hiciste con el código como este?

Para cualquiera que haya tenido el mismo problema. Cambié mi código a:

 ship.runAction(SKAction.waitForDuration(5), completion: { [unowned self] in self.ship.flyStraight() }) 

Use [unowned self] in su bloque no agregará una fuerte reference a sí mismo.

Gracias por el enlace de Martin: "Resolver fuertes ciclos de reference para cierres"

También puedes echar un vistazo a esta pregunta.