OnDestroy에서 콜백함수 지울 때 질문입니다.
335
작성한 질문수 7
Awake에서 리스너를 등록할 경우, 오브젝트가 한 번도 활성화 되지 않았다고 가정할 때 OnDestroy 함수가 호출되지 않아 나중에 오류가 날 수 있을 것 같은데요.
(물론 Start에서 등록을 하면 아무런 문제가 없겠지만요.)
Awake에서 리스너를 등록하는 경우는 아예 없나요?
제 짧은 식견으로는 버그의 가능성만 보이고 실제 있을 법한 사례인지는 판단이 어려워 여쭤봅니다..
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
gya9877님, Unity에서 Awake 함수는 오브젝트가 생성될 때 단 한번 호출되며, OnDestroy 함수는 오브젝트가 제거될 때 호출됩니다. 말씀하신 문제는 실제로 발생할 수 있습니다.
Awake에서 리스너를 등록하는 경우는 분명 있습니다. 주로 오브젝트가 활성화 되기 전 필요한 초기 설정을 수행할 때 사용하죠. 하지만 Awake에서 이벤트 리스너를 등록할 경우, 해당 오브젝트가 비활성화 상태에서 파괴된다면 OnDestroy가 호출되지 않고, 리스너가 제거되지 않아 메모리 누수가 발생할 수 있습니다.
이 문제를 방지하기 위해선 다음과 같은 점을 고려할 수 있습니다:
- 가능하다면 Start에서 리스너를 등록하고 OnDestroy에서 제거하는 식으로 사용하는 것이 안전합니다.
- 오브젝트가 활성화/비활성화될 때마다 리스너 등록과 제거를 OnEnable과 OnDisable에서 처리하는 방법도 있습니다. 이렇게 하면 오브젝트의 생명주기 상태에 관계없이 리스너가 안전하게 관리됩니다.
제안해 드린 방법을 참고하여 안정적인 코드를 작성해 보시길 바랍니다.
Addressables로 등록한 Slice된 Sprite의 하위 Sprite 접근법에 대해 질문드립니다
0
85
1
유니티 데이터 저장객체 ScriptableObject에 대해 의견 여쭤보고 싶습니다
0
143
2
안녕하세요 선생님 공부중에 궁금한게 있어서 질문 드려요
0
65
1
상속 구조에서의 awake흐름 및 init 함수 질문있습니다
0
86
1
젬 스프라이트가 로딩되지 않습니다.
0
116
1
혹시 스프라이트 드래그 앤 드롭으로 애니메이션 생성할 때
0
122
1
init() 2번 실행? 등 스킬 마무리 강의에서 질문 있습니다.
0
169
2
Managers.Object.Player와 Mangers.Game.Player 차이
0
113
1
상업적 출시에 대한 질문입니다.
0
169
1
EquipmentData 관련해서 질문드립니다
0
117
1
Data관리 관련해서 질문드립니다.
0
171
2
MonsterControllelr 에서 State Dead 사용
0
107
1
안드로이드 빌드에서는 LoadAllAsync , LoadAsync 가 동작 하지 않고 있습니다.
0
241
2
Instantiate 관련 질문 드립니다
0
159
1
포트폴리오 문서작성에 있어서 질문드립니다.
0
600
2
UI 연동방식에 대해서 질문드립니다.
0
182
1
인디게임출시경험이 중요할까요?
1
346
1
Coroutine과 uniTask 질문드립니다.
0
240
1
ResourceManager 메서드 역할
0
221
1
스프라이트 자료
1
181
1
xml 에
0
269
2
UI 리소스 사용문의
0
270
1
폴더 이름 제일 앞에 @를 붙이는 이유가 궁굼해요
0
595
2
3.:43 초 때부터 잘 안되는 것 같습니다...
0
329
1





