=> NotificationCenter.default가 싱글톤이므로 deallocate 되지 않고 해당 클로저를 참조하므로 해당 클로저도 deallocate 되지 않는다. 따라서 클로저가 self를 strong하게 참조하면 self의 refCount가 1이 올라가기 때문에 self는 절대 deallocate 되지 않는 메모리 누수가 발생하게 된다. 이때 self를 weak 참조해야 메모리 누수는 해결된다.
=> 강한 순환 참조 문제를 해결하기 위해서
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)
https://developer.apple.com/documentation/uikit/uicontrol/1618248-removetarget#discussion