2014-12-12 7 views
0

나는 메뉴 장면과 게임 장면을 가진 간단한 게임을 가지고있다. 게임 장면이 끝나면 메뉴 장면으로 돌아간 다음 게임 장면으로 돌아갑니다.PresentScene 메모리 : removeAllChildren이 전파됩니까?

모든 전환은 self.view?.presentScene(Scene(size: self.view!.bounds.size))으로 처리됩니다.

나는 또한 MenuScene과 GameScene 모두에서이 코드를 추가 :

override func willMoveFromView(view: SKView) { 
    self.removeAllActions() 
    self.removeAllChildren() 
} 

을하지만, "할당"와 "누출"프로파일 링 도구를 사용하여, 나는 조금 만 (메모리 소비가 계속 성장 실현 그러나 각각 presentScene 이후). "누출"탐지가 없습니다.

removeAllChildren은 노드 내의 모든 노드에 전파됩니까? 또는 어린이의 모든 어린이를 수동으로 제거해야합니까?

참고 : 나는 엑스 코드 6.1.1을 사용하고, 아이폰 시뮬레이터 아이폰 OS 8.1

일부에 println을 (로그) 및 deinit 않으면 볼 수있는 기능 deinit를 사용

Memory keeps increasing in the graph

+0

씬에 추가 된 노드에 할당 된 메모리는 씬이나 노드에 대한 참조가없는 한 새로운 씬으로 전환 할 때 자동으로 해제되어야합니다. – 0x141E

+0

두 개의 removeAll * 함수 중 하나를 직접 호출 할 필요는 없습니다. 스프라이트 키트는 코드가 메모리 관리 권한을 가지고있는 경우 장면을 적절하게 정리합니다. 당신이 그렇게하고 있다는 사실은 당신이 다른 곳에서 당신의 기억 문제를 해결할 것이라는 희망에서했던 것입니다. 여전히 강력하게 참조되는 장면 (예 : 어레이 또는 싱글 톤 속성에 추가 한 장면) 또는 유지주기를 유발하는 노드 (즉, 형제 노드가 서로 또는 부모를 강력하게 참조 함)가 확실한 방법인지와 같은 실제 문제를 찾습니다. 보유주기를 생성). 일부 포인터를 얻으려면 분석 빌드를 실행하십시오. – LearnCocos2D

답변

0

, 나는 MenuScene는 것을 발견 GameScene이 아니라 올바르게 초기화되지 않습니다. 나는 주요 장면 노드의 노드 중 하나에

self.removeAllActions() 
self.removeAllChildren() 

을 적용했다.

관련 문제