반응형
NotificationCenter에 등록된 이벤트가 발생하면 해당 이벤트들에 대한 행동을 취하는 것.
앱 내에서 아무데서나 메시지를 던지면 앱 내의 아무데서나 이 메시지를 받을 수 있게 해 주는 것이 NSNotificationCenter의 역할.
post
옵저버에게 전달할 값을 전송해주는 부분
NotificationCenter.default.post(name: Notification.Name("이벤트이름"), object: 전달할값)
Add Observer
Notification.Name("")을 탐지하고 있다가 해당 이름으로 notification이 전송되면 수행하는 부분.
NotificationCenter.default.addObserver(self, selector: #selector(호출할함수), name: NSNotification.Name(rawValue: "이벤트이름"), object: nil)
post 사용 시 전달할 값(object)은 보통 null 로 보내주지만
전달하고자 하는 값이 있다면, observer에 #selector로 지정해준 함수 안에서 다음과 같이 불러올 수 있다.
@objc func 호출함수(_ noti: Notification) {
print(noti.object)
}
그런데 String 값을 전달해도 noti.object가 Any? 타입으로 넘어오기 때문에, 다음과 같이 설정해서 사용할 수 있다.
guard let value = noti.object as? String else { return }
Remove Observer
NotificationCenter는 싱글턴 인스턴스?라서 여러 오브젝트에서 공유한다?
그래서 옵저버를 등록한 오브젝트가 메모리에서 해제되면 NSNotificationCenter에서도 옵저버를 없앴다고 알려줘야.
//self에 등록된 옵저버 전체 제거
NotificationCenter.default.removeObserver(self)
//특정 옵저버 하나 제거
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "이벤트이름"), object: nil)
보통은 counterpart 되는 곳에 맞춰서 해제를 시켜준다고 한다.
viewWillAppear <-> viewWillDisappear
viewDidLoad() <-> deinit()
728x90
반응형
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift iOS] webview 로딩 완료 감지 (feat. WKNavigationDelegate) (0) | 2021.09.27 |
---|---|
[Swift iOS] 키보드가 textField를 가릴 때 해결법 (0) | 2021.09.23 |
[Swift iOS] WKWebView url 변경 감지 (0) | 2021.09.23 |
[Swift iOS] 한글 포함된 URL 인코딩하는 법 + url 디코딩 (0) | 2021.09.01 |
[Swift iOS] AutoSlide Banner using UICollectionView (0) | 2021.08.11 |