티스토리 뷰

개발을 하다보면 한 객체가 다른 객체를 자식으로 가지는 계층 구조를 많이 만들게 되는데 이 계층화된 객체를 메모리에서 삭제(remove)시키려면 최상위 객체만 부모 레이어로부터 remove시키면 된다.

임의로 최상위 객체의 소멸자에서 removeAllChildren()같은 함수를 추가하면 나중에 레이어를 삭제할 때 문제가 발생할 수 있다. 


문제 발생 시나리오

레이어 A에 Sprite객체 head와 SpriteBatchNode headBatch, bodyBatch가 추가되어 있고, head는 자식으로 body와 arm을 가지고 있다.


이 때 arm과 body의 이미지는 head이미지를 가지고 있는 plist와 다른 plist에 있으므로 객체 head를 생성할 때 bodyBatch를 전달하여 body와 arm을 sprBatch에 추가시킨다.


( head의 소멸자에는 자신의 자식을 모두 remove시키는 removeAllChildren() 함수가 작성되었다. )


스테이지 변경을 위해 레이어 A를 scene으로부터 remove시킨다.


문제 : head의 소멸자가 호출되기 전에 엔진으로 부터 head의 자식을 제거하는 프로세스가 호출되기 때문에 removeAllChildren()함수에서 문제가 발생한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함