2017-08-04 15 views
0

私は順番にオブジェクトにスプライトを関連付けました。私のObjectクラスの抜粋:変数の所有者を返す - スウィフト

import SpriteKit 

class Block { 

var sprite : ColourSprite 

} 

あなたが見ることができるように、それは実際にはSKSprite(ColourSpriteがSKSpriteNodeから継承私のカスタムクラスである)である変数を持っています。

ゲーム中のいくつかの時点で、これらのスプライトは削除されます(sprite.removeFromParent())が、オブジェクトは明らかにまだどこかにあります。

スプライトが消えたら、ガベージコレクションにオブジェクトを送信したいと思っています。私はsprite.getOwner()のようなことができると思っていますが、見つけられないようです。これは可能ですか?

私が考えることができる唯一のオプションは、すべてのオブジェクトを手動でチェックし、それぞれのスプライトをチェックすることですが、長くて無駄です。

+0

"ブロック"オブジェクトには何らかの参照がありますか?何かそれを維持していますか?あなたはブロックや何かの配列を持っていますか? Blockクラス内にスプライドをラップする目的は何ですか? – Pochi

+0

はい、私はGameScenceの例です:let block1 = Block()。私はそれの目的は、複数のブロックスプライトを作成するときだと思います。私は、物理的なものを設定するときにコードの行を繰り返したくないので、クラス内のすべての機能を保持しました。 –

+0

「なぜオブジェクトは明らかにまだどこかにいる」と言うのはなぜですか?あなたがオブジェクトに参照されているすべてのものを解放していて、解放されていない(デストラクターが呼び出されていないなど)場合は、おそらく循環参照があります。 – Michael

答えて

1

Xcode 8.3の新しいデバッグパネルを使用して、Blockがまだメモリに残っているかどうかを確認できます。

enter image description here

enter image description here

あなたのスプライトは、プログラムを一時停止し、そのパネルに移動削除した直後。左側のパネルにBlockインスタンスがあるかどうかを確認します。もしあれば、それをクリックして、それを保持しているものを確認してください。

たとえば、GameSceneBlockがある場合は、GameSceneにアクセスしてプロパティを検索します。その後、スプライトを削除した後にそれをnilに設定することができます。

関連する問題