2017-08-04 85 views
0

所以我有反過來有與他們相關的精靈的對象。我Object類的一個片段:返回變量的所有者 - Swift

import SpriteKit 

class Block { 

var sprite : ColourSprite 

} 

因此,大家可以看到,它有一個變量,它實際上是一個SKSprite(ColourSprite是從SKSpriteNode繼承我的自定義類)。

現在,在遊戲過程中的某些點,這些精靈將被刪除(即sprite.removeFromParent()),但對象顯然還是在某處。

我希望能夠發送對象到垃圾收集一旦他們的精靈都消失了。我想我可以做一些像sprite.getOwner()但我似乎無法找到它。這可能嗎?

我能想到的唯一的其他選擇是手動檢查所有對象並檢查每個人的精靈,但我覺得這是漫長而浪費的。

+0

您是否保留對「塊」對象的任何形式的參考?有事嗎?你有一個塊或什麼東西陣列?在Block類中包裝Spride的目的是什麼? – Pochi

+0

是的,所以我在GameScence中例如:let block1 = Block()。我認爲它的目的是當我創建多個塊精靈時,我不想在設置物理和物體時重複代碼行,所以我在課堂上保留了所有這些功能。 –

+0

爲什麼你說「物體顯然還在某處」?如果你認爲你釋放了所有引用的對象並且沒有被釋放(例如,析構函數沒有被調用),那麼你可能有一個循環引用。 – Michael

回答

1

您可以通過使用Xcode 8.3的新調試面板來檢查Block是否仍在內存中。

enter image description here

enter image description here

剛過刪除你的精靈暫停程序,並轉到該面板。查看左側面板中是否有任何Block實例。如果有,請點擊它來檢查保留的內容。

例如,如果您的GameScene正在保留Block,那麼請轉到GameScene並找到該房產。然後,您可以在刪除精靈之後將其設置爲nil