이 설정이 있습니다.액션으로 sprite를 제거합니다.
레이어에 자식이있는 스프라이트가 있습니다. 스프라이트는 init 메소드에서이 코드를 가지고 :
id fadeOut = [CCFadeOut actionWithDuration:1.0f];
id death = [CCCallFunc actionWithTarget:self selector:@selector(die)];
self.deathAction = [CCSequence actions:fadeOut, death, nil];
[self runAction:deathAction_];
죽음 조치가 상태가 '죽은'로 변경되는 스프라이트의 '다이'메소드를 호출합니다.
[self removeChild:child cleanup:YES];
문제는 자식 스프라이트가 여전히 줄 끝에서 2 retaincount을 가지고 있다는 것입니다 :의 업데이트 방법에
는 사람이 느릅 나무 레이어를 확인 모든 어린이와 제거가와 '죽은 자'입니다. 내가 알고 있듯이 CCCallFunc에 의해 유지됩니다. 이 deathAction을 생략하고 불투명도가 0 인 스프라이트를 제거하면 (코드가 희미해질 때) 코드가 작동하고 dealloc 메서드가 호출됩니다.
조치를 올바르게 사용하여 스프라이트를 제거해야하는 방법은 무엇입니까?
참조에 대한 귀하의 말이 맞았습니다. 제거가 스프라이트에 의해 내부적으로 처리되도록 코드를 수정했습니다. 나는 액션을 통해 죽음 메서드를 호출하고 그 안에'[self removeFromParentAndCleanup : YES];를 호출합니다. 문제는이 호출 전에 '[deathAction_ release];'를 호출하는 것이 었습니다. 왜? 스프라이트의 dealloc 메소드에서 릴리스 콜이 있습니까? 액션을 통해서가 아닌 다른 방법으로 스프라이트를 제거하기를 원한다면 어떨까요? – bolshas
균형을 유지하고있는 것을 정확히 모른 채 개체를 해제하는 경우 문제가 해결되지 않고 증상 만 숨겨져 있습니다. – bbum