我完成了spritekit遊戲,但沒有強大的參考週期知識。我沒有任何崩潰或明顯的問題,但使用工具我可以看到我的對象被保留在每個級別之間(SKScene應該在各級之間進行處理)。Swift/SpriteKit - 無法打破強大的參考週期
這裏是我的一般遊戲的部分:
GameConfig
靜態結構
我有一個全局可訪問的靜態結構,引用我的視圖控制器。我從整個應用程序使用這個結構訪問viewController。我給你GameConfig.viewController = self
了的viewController的viewDidLoad
GameViewController
在這裏我引用我的SKScene,並SKView這樣
var skView: MyView!
weak var scene: SKScene!
BaseScene
這是我的基地SKScene類的內。這是獲取類本身
let indicators: Indicators = Indicators()
KillScene
的BaseScene
在我BaseScene子類的子類的引用這個類的唯一屬性,我已經包含在陣列中許多自定義子類。這些自定義子類可以引用場景,但場景並不直接引用它們。它只能引用它們的容器數組。例如:
var radarBlips: [RadarBlip] = []
我有具有與KillScene
var ship: KillShip = KillShip()
在我的兩個Indicators
和KillShip
類很強的參考週期的一個特性,我已經使用weak
關鍵字引用我的場景。
事實上,我已經找到了我參考場景的每個實例,並且在其前面放置了weak
。
我試圖做一個精簡的遊戲,並在精靈和場景之間創建一個強大的引用循環,然後打破它。我成功地這樣做了。但我似乎無法調試我自己的遊戲。
任何詳細的建議將是有幫助的。我知道在周圍傳球時會有一些技巧。也許這跟它有關係?任何我能找到的建議都會很棒。我已將weak
放在比我需要的地方更多的地方。
我不能讓現場deinit
當我使用精靈套件進行強大的參考週期時,要麼是因爲我忘記將「weak」添加到保存對其父節點的引用的節點。或者,我通過在閉包中不使用'[無主自我]'或'[弱自我]'來創建一個強大的參考週期。 – ABakerSmith
你可以擴大關閉。我沒有真正考慮過這一點。也許鏈接我一個很好的參考? – hamobi
看看這個:http://blog.xebia.com/2014/10/09/function-references-in-swift-and-retain-cycles/然後,我建議通過您創建的任何關閉並確保你沒有創建任何強大的參考週期。 – ABakerSmith