2017-01-20 4 views
1

後にゼロになることから、弱いSKSpriteNodeを停止し、私は現在、(私のGameSceneクラスで)私のコードの先頭にweakとしてSKSpriteNodeを定義し、このようにそれを宣言します。スウィフト3(SpriteKitベース):私のプログラムでは初期

weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10)) 

しかし、それはweakであり、現在の参照はないので、使用する前に削除されてnilになります。また、私のプログラムでは、私はこのようなweak SKLabelNodeを初期化:

weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin") 

、それはSKSpriteNodeとは違って、すぐに削除されません。私はそれを使用したいとき

tapToBegin = SKLabelNode(text: "Tap to Begin") 

これはないnilSKLabelNodeをした:私はこのようにそれを使用する前SKLabelNodeを再宣言することによって、私はこれを達成方法でした。しかし、同じアプローチでSKSpriteNodeを再宣言しようとしましたが、まだそれはnilでした。

注: initialisationsがあり、私が最初に私のプログラムでこれらのnodesを使用する必要がどこ場所です:

class GameScene: SKScene, SKPhysicsContactDelegate { 

    //Initialisations are here 
    weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10)) 
    weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin") 

    override func didMove(to view: SKView) { 
     //I first use these nodes here 
    } 
} 

はすぐにデあることからSKSpriteNodeを防止する方法はあります初期化された?また、SKSpriteNodeがすぐに削除されるのはなぜですか?また、SKLabelNodeは削除されません。

+0

あなたが述べたことは意味をなさない。また、私はあなたのコードを試して、両方のラベルとスプライトは即座に割り当てが解除されます。これらのノードは何も保持しないので、 'didMove(toView:)'が終了するとすぐに割り当て解除されます。あなたのコードには、そのラベルを保持するものがあります。 – Whirlwind

+0

@ Muffinman2497の答えに対するコメントを読む。 –

答えて

2

weakキーワードを使用すると、 SpriteNodeがARCによってピックアップされ、削除されます。 SpriteNodeと対話しようとすると、もはやメモリに格納されていないため、例外が発生します。 キーワードの前にweakを削除してください。

var tapFade:SKSpriteNode = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10)) 
+0

しかしSpriteNodeは弱いので、後で削除することができます。 –

+0

後で削除する必要があるのはなぜですか?それはメモリの問題を引き起こしていますか?あなたは何をしようとしているのか、もっと多くの情報を教えてください。 – Muffinman2497

+0

はい、後でプログラムに入ります。 –

関連する問題