2012-06-04 4 views
4

정확히 deallocCocos2D 장면의 방법은 무엇입니까? 다른 장면이로드되면 바로? 또는 장면로드가 끝난 후에?
또한 덮어 쓰기를 계획하는 경우 dealloc 메소드에 있어야하는 항목은 무엇입니까?
분명히 cocos2D은 장면이 할당 해제 될 때 장면에 연결된 모든 노드를 자동으로 제거합니다. 그러나, 만약 내가 그것을 덮어 쓸 계획, 구체적으로 내가 호출해야합니다 방법은? 그렇다면 장면을 관리하여 100 % 누수가 없는지 어떻게 확인할 수 있습니까? 미리 감사드립니다.Cocos2D 장면 할당 해제

답변

1

CCScene의 deallocator는 다른 개체와 동일한 규칙을 따릅니다. CCScene에 대한 참조 횟수가 0에 도달하면 실행됩니다.

기본적으로 장면은 대체 할 장면을 신경 쓰지 않지만 장면 전환을 사용하여 장면을 변경하는 경우 두 장면이 동시에 존재하는 시간이 있습니다. 전환이 끝나면 전환은 첫 번째 장면에 대한 참조를 해제합니다. 첫 번째 장면은 마지막으로 그러한 참조가되고 첫 번째 장면은 할당 취소됩니다.

장면 deallocator에서 CCLOG를 넣어 정확하게 실행되는지 확인하십시오. 나는 각각에 하나씩 넣어.

일반적으로 alloc, new 또는 copy으로 시작하는 방법을 사용하여 만든 모든 개체를 Cocos2D 개체인지 여부에 관계없이 수동으로 해제합니다. Cocos2D의 node과 같은 다른 생성 방법은 오브젝트를 수동으로 retain으로 선택하지 않는 한 수동 릴리즈가 필요하지 않습니다. 직접 다른 노드에 자식을 추가하지 않을 경우이 방법을 사용하는 것이 좋습니다.

말했듯이 노드를 다른 노드로 추가한다고해서 추가 노드가 필요하지는 않습니다. release; Cocos2D가이를 처리 할 것입니다.

+0

오 ... 이제 알 것 같습니다! 바로 지금, 나는 cocos2D 노드 인 객체를 소유하고있는 특정 장면을 가지고 있습니다. 내가 "새로 고침"할 때마다 init을 사용합니다. 그게 내가 기억을 새기고 있다는 뜻인가? (한 번만 dealloc 메서드에서 해제합니다. 다시 감사합니다! – wayway

+0

Aprics, 네 말이 맞아, 보유 개수가 초기화되고 초기화되지 않도록하는 alloc입니다.하지만 일반적으로 함께 사용됩니다. init에서하고있는 것 - 종종 다른 객체가 init에서 생성되므로, init을 다시 호출하기 전에 이들 객체를 해제하지 않으면 문제가 발생할 수 있습니다. –

1

장면 클래스에 할당 한 모든 개체가 장면으로 자식으로 추가되지 않으면 명시 적으로 해제해야합니다.

다른 장면 개체로 대체하거나 (replaceScene 메서드로) 장면을 대체하거나 장면 스택에서 장면을 팝업 할 때 장면이 해제되고 (대부분의 시간을 다른 곳에서 유지하지 않으면 할당이 취소됩니다).

소스 코드 (매우 유용한 설명이 포함되어 있음)를보고 장면 클래스를 사용자 정의한 경우 정확히 수행해야 할 작업을 배우는 것이 좋습니다.