스프라이트 키트에서 SKScene이 할당을 해제하지 않는 이유를 알아 냈습니다. 결국 대답에 한걸음 더 가까이 다가갔습니다. SKAction
블록을 completion
블록으로 많이 사용합니다. . 나는 약한 참조를 사용해야한다는 것을 배웠다.__weak으로 누출 피하기
어떻게 제대로 할 수 있습니까? 블록 내부의 모든은 약합니까?
__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) {
[weakSelf fireMG];
}
}];
감사 :
[weakSelf runAction:[SKAction waitForDuration:.1f] completion:^{
if (mgFiring) {
[self fireMG];
}
}];
로 변경 될! 튜토리얼을 통해 Sprite Kit를 배울 때 강한 참조가있는 completion
블록을 사용하는 것에 대해서는 경고하지 않았습니다.
'SKScene'이 (가) 출시되지 않는 것을 어떻게 알 수 있습니까? Instruments에서 게임을 테스트 했습니까? – 0x141E
@ 0x141E 예를 들어, 저는 장비로 테스트했고, 새로운 게임 장면을 시작할 때마다 메모리가 올라가고 절대로 다시 돌아 오지 않습니다. 둘째,'SKScene'의'dealloc' 메서드를'NSLog'했는데 결코 호출되지 않습니다. – Todd
제공 한 코드에서 'SKScene'을 유지할 수있는 내용이 표시되지 않습니다. – 0x141E