在sprite工具包中,我一直在努力研究爲什麼我的SKScene不會釋放,並且我相信我終於更接近答案了:我使用了很多SKAction
s和completion
塊。我剛剛得知我必須使用弱引用。用__弱點避免泄漏
我該如何正確地做到這一點? 一切塊內必須弱?比如,我最近剛剛更改了塊的一個看起來像這樣:
__weak typeof(self.heli) weakheli = self.heli;
[weakheli runAction:[SKAction fadeAlphaTo:1.0f duration:1.0f] completion:^{
ghostMode = NO;
}];
難道我也不得不做出__weak typeof(ghoseMode) weakGhostMode = ghostMode
聲明,只改變weakGhostMode
塊裏面?
再舉一個例子,應該:
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[self fireMG];
}
}];
改爲:
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[weakSelf fireMG];
}
}];
感謝您的幫助!當我通過教程學習Sprite Kit時,我們從未警告過使用帶有強引用的completion
塊。
你怎麼知道你的'SKScene'沒有被釋放?你用儀器測試了你的遊戲嗎? – 0x141E 2014-11-20 19:38:10
@ 0x141E對於其中一個,是的,我已經用儀器測試過了,每次我啓動一個新的遊戲場景時,內存都會上升,永遠不會回落。二,我有'NSLog'''我的'SKScene'的'dealloc'方法,它從來沒有被調用過。 – Todd 2014-11-20 19:44:43
我沒有看到你提供的將保留'SKScene'的代碼。 – 0x141E 2014-11-20 21:23:36