TIL 2020.06.10

Doehyung Kim·2020년 6월 10일
0

1. @escaping closure 관련 momory leak 알아보기

  • 지금까지 했던 모든 프로젝트에서 addObserver 관련 self 캡처를 캡처리스트를 이용해 weak로 선언하기 (o)

=> NotificationCenter.default가 싱글톤이므로 deallocate 되지 않고 해당 클로저를 참조하므로 해당 클로저도 deallocate 되지 않는다. 따라서 클로저가 self를 strong하게 참조하면 self의 refCount가 1이 올라가기 때문에 self는 절대 deallocate 되지 않는 메모리 누수가 발생하게 된다. 이때 self를 weak 참조해야 메모리 누수는 해결된다.

  • 지금까지 했던 모든 프로젝트에서 delegate 객체를 weak로 선언하기 (o)

=> 강한 순환 참조 문제를 해결하기 위해서

2. removeObserver 알아보고 적용하기

https://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver

  • addObserver(forName:object:queue:using:) 을 사용하는 경우에는 반드시 토큰 발행하고 removeObserver를 호출해야 한다. ( 이 메소드는 clean up 이 되지 않나 보다.. 궁금하다)

  • addObserver(_:selector:name:object:) 을 사용하는 경우에는
    iOS version이 9.0 이상이면, post 될때 deallocate 된 옵저버를 정리(clean up)하기 때문에 removeObserver를 호출할 필요가 없다.

  • 이전 프로젝트에서 모두 적용 (o)

3. removeTarget 알아보고 적용하기

https://developer.apple.com/documentation/uikit/uicontrol/1618248-removetarget#discussion

  • 이전 프로젝트에서 모두 적용 (o)
profile
해피 코딩

0개의 댓글