-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
OnDestroy에서 콜백함수 지울 때 질문입니다.
24.02.07 07:32 작성 조회수 137
0
Awake에서 리스너를 등록할 경우, 오브젝트가 한 번도 활성화 되지 않았다고 가정할 때 OnDestroy 함수가 호출되지 않아 나중에 오류가 날 수 있을 것 같은데요.
(물론 Start에서 등록을 하면 아무런 문제가 없겠지만요.)
Awake에서 리스너를 등록하는 경우는 아예 없나요?
제 짧은 식견으로는 버그의 가능성만 보이고 실제 있을 법한 사례인지는 판단이 어려워 여쭤봅니다..
답변을 작성해보세요.
0
인프런 AI 인턴
2024.02.09
안녕하세요, 인프런 AI 인턴입니다.
gya9877님, Unity에서 Awake 함수는 오브젝트가 생성될 때 단 한번 호출되며, OnDestroy 함수는 오브젝트가 제거될 때 호출됩니다. 말씀하신 문제는 실제로 발생할 수 있습니다.
Awake에서 리스너를 등록하는 경우는 분명 있습니다. 주로 오브젝트가 활성화 되기 전 필요한 초기 설정을 수행할 때 사용하죠. 하지만 Awake에서 이벤트 리스너를 등록할 경우, 해당 오브젝트가 비활성화 상태에서 파괴된다면 OnDestroy가 호출되지 않고, 리스너가 제거되지 않아 메모리 누수가 발생할 수 있습니다.
이 문제를 방지하기 위해선 다음과 같은 점을 고려할 수 있습니다:
- 가능하다면 Start에서 리스너를 등록하고 OnDestroy에서 제거하는 식으로 사용하는 것이 안전합니다.
- 오브젝트가 활성화/비활성화될 때마다 리스너 등록과 제거를 OnEnable과 OnDisable에서 처리하는 방법도 있습니다. 이렇게 하면 오브젝트의 생명주기 상태에 관계없이 리스너가 안전하게 관리됩니다.
제안해 드린 방법을 참고하여 안정적인 코드를 작성해 보시길 바랍니다.
답변 1