인프런 커뮤니티 질문&답변
이벤트는 따로 삭제하지 않아도 되나요?
작성
·
185
0
이벤트에 함수를 추가해줄 경우, 따로 삭제해주지 않으면 스크립트가 붙은 오브젝트가 파괴된 후에도 계속 해당 스크립트를 참조하고 있는걸로 알고 있습니다. 참조가 하나라도 있으면 가비지 콜렉터가 해당 스크립트의 내용을 메모리에서 지우지 못한다고... 그래서 기존에는 OnDestroy() 에서 추가해준 이벤트를 일일히 삭제했었는데요, 강의를 보니 이벤트 추가 때 혹시 모르니 함수를 한번 뺀 다음 추가해주는 방식을 사용하더라고요. 참신하면서도 되게 편리한 방식이라고 느껴서 앞으로는 이렇게 하려고 합니다.
그런데 한 가지 걱정되는게 있습니다. 같은 프리팹이라도 파괴 후 재생성하면 엄연히 다른 오브젝트일텐데, 이전에 지워진 오브젝트에 붙어 있던 스크립트는 이벤트를 삭제해주지 않아서 여전히 참조되고 있지 않나요? 이로 인해 UI를 켰다 끌 때마다 메모리에 공간이 할당되고 지워지지 못하는 등의 문제가 발생하지는 않는지 궁금합니다.
어설프게 주워들은게 많다보니 질문이 많네요. 정확한 표현이 되었는지 모르겠습니다. 죄송합니다 ㅠㅠ
답변 1
1
정확히 알고 계신게 맞습니다.
한번 -= 을 해준 것은 동일한 오브젝트에 대해 함수를 중복 등록할까봐 넣어준거지,
삭제되는 객체에 대한 처리를 위함이 아닙니다.
말씀주신대로 UI를 끌 때 혹은 OnDestroy에서 이벤트를 Clear 해주는게 맞습니다.
당장 UI에서 그 부분을 크게 신경쓰지 않은 이유는,
나중에는 처음에 특정 Scene에서 필요한 UI를 한 번 로드해서
(Prefab 생성/삭제를 반복하는게 아니라)
계속 메모리에 UI 객체를 들고 있으면서 On/Off 처리하는 방식으로 수정될 예정이기 때문입니다.
그런데 FM대로 하면 이벤트 정리도 하는 것이 맞습니다.
안그러면 reference count가 0이 되지 않아 해제되지 않겠죠!





