study record

[iOS] NotificationCenter 본문

iOS/iOS 정리

[iOS] NotificationCenter

asong 2022. 3. 16. 12:16

NotificationCenter

NotificationCenter에 등록된 이벤트가 발생하면 해당 이벤트에 대한 행동을 취한다.

앱 내에서 메세지를 던지면 어디에서나 이 메세지를 받을 수 있게 한다.

보통 백그라운드 작업의 결과, 비동기 작업의 결과 등 현재 작업의 흐름과 다른 흐름의 작업으로부터 이벤트를 받을 때 사용한다.

 

싱글턴 객체 중 하나로, 이벤트들의 발생 여부를 옵저버를 등록한 객체들에게 Notification을 post하는 방식으로 사용한다.

Notification Name이라는 Key 값을 통해 보내고 받을 수 있다.

 

NotificationCenter는 notifiaction을 발송하면 NotificationCenter에서 메세지를 전달한 observer의 처리가 완료될 때까지 대기한다(동기). 비동기적으로 사용하려면 NotificationQueue를 사용해야 한다.

 

- 언제 사용?

하나의 VC가 아닌 여러 개의 VC를 통제하고 싶을 때. 1:N 상황에 더 유용.

상호작용이 반복적으로, 지속적으로 이루어져야 할 때.

 

// 노티피케이션 발송
 NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: nil, userInfo: nil)​
 
  // 옵저버 등록
 NotificationCenter.default.addObserver(self, selector: #selector(didRecieveTestNotification(_:)), name: NSNotification.Name("TestNotification"), object: nil)

 @objc func didRecieveTestNotification(_ notification: Notification) {
         print("Test Notification")
 }

 

 

Notification의 종류

- Notification: 일반적으로 사용하는데 사용하는 Notification

- Local Notification : 특정 시간에 알림이 날라오게 하는데 활용하는 Notification

- Remote Notification : 앱에서 알림이 날라오게 할 때 사용하는 Notification

 

Notification 실행 로직

  1. sender 객체에서 Notification 생성 후 NotificationCenter에 보낸다.
  2. 특정 Notification이 들어오면 실행하고 싶은 로직은 addObserver 메서드를 이용해 NotificationCenter 객체에 등록한다.
  3. sender 객체에서 보낸 Notification이 NotificationCenter 객체의 Dispatch Table에 저장된다.
  4. 저장된 Notification을 활용하는 Observer들에게 Notification이 들어왔음을 알려준다.
  5. OBserver 실행

 

 

 

참고:

https://silver-g-0114.tistory.com/106

https://leeari95.tistory.com/49

https://velog.io/@cooo002/ios-Notification%EC%9D%98-%ED%99%9C%EC%9A%A9