NotificationCenter는 중앙집권적이다! 모든 뷰의 행동들을 감시하고 그에 해당하는 정보를 수신해 관리하는 곳이다. 여러 notification이 모여 있는데 각 viewController에 파견되어 감시하는 친구가 Observer이고 NotificationCenter에 Observer들이 등록되어 있다.
Observer와 Notification Center 그리고 notification의 관계를 각자 이름의 뜻을 잘 생각해보며 이해해보자
Notification
등록된 모든 observers에 NotificationCenter를 통해 정보를 전달하기 위한 구조체
- var name : Notification.name //알림 식별 태그
- var object: 발송자가 옵저버에게 보내려고 하는 객체. 주로 발송자 객체를 전달하는 데 쓰임
- var userInfo : Notification과 관련된 값이나 객체의 저장소
Notification Center
동시에 등록된 옵저버에게 Notification을 전달하는 역할을 담당하는 클래스
Notification을 발송하면 Notificationcenter에서 메세지를 전달한 observer를 처리할때까지 대기 (sync)
비동기적인 처리를 원할 시 notificationQueue를 사용한다.
- default : 애플리케이션의 기본 notification center
- 옵저버 추가 및 제거
- addObserver(forName:object:queue:using:) - Notification을 Center의 메소드를 가리키는 장소에 이름을 추가, 즉 옵저버를 등록해 notification 발송할 수 있게끔 함
- removeObserver(_:name:object:) - 을 Center의 메소드를 가리키는 장소에서 일치하는 이름(name)을 제거
Notification
NotificationCenter.default.addObserver(self,
selector: #selector(didRecieveTestNotification(_:)),
name: NSNotification.Name("TestNotification"),
object: nil)
@objc func didRecieveTestNotification(_ notification: Notification) {
print("Test Notification")
}
TestNotification이라는 이름을 가진 notification을 notificationCenter에 등록해두고 옵저버를 통해 이 이름을 가진 notification이 post(발송)될 시 didRecieve~ 함수가 실행되도록 함.
* 만약 object에 특정 객체 명시하면 명시한 객체가 발송한 Notification일때만 해당 이름의 Notification을 수신한다.
- notification 발송
- post(name:object:userInfo:) : 지정된 notification(name)을 보낸 객체(object)와 보낼 정보(userInfo)와 함께 notificationCenter에 보낸다.
NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: nil, userInfo: nil)
'IOS🍎 > iOS+Swift' 카테고리의 다른 글
[iOS] Layout 정리 (0) | 2021.04.27 |
---|---|
[iOS] UIScene, UIWindowScene, UISceneSession (0) | 2021.04.16 |
[Swift] Closure에 대해 알아봅시다. (0) | 2021.04.16 |
[Swift] Property - stored, computed, type / Observer (0) | 2021.04.13 |
[iOS] iOS13이후의 AppDelegate와 SceneDelegate (0) | 2021.04.07 |
댓글