iOS

[iOS] Notification Center

thoonk: 2021. 5. 27. 21:37
반응형

NotificationCenter & Notification에 관해 기록합니다.

 

NotificationCenter

등록된 observer에게 동시에 Notification을 전달하는 클래스이다. Notification 클래스는 Notification을 발송하면 NotificationCenter에서 메시지를 전달한 observer가 처리될 때까지 대기한다. → 동기적(synchronous)인 흐름

Notification을 비동기적으로 사용하라면 NotificationQueue를 사용한다.

 

 

Getting the Default NotificationCenter

class var `default`: NotificationCenter

애플리케이션의 기본 Notification

 

Adding and Removing Notification Observsers

func addObserver(forName name: NSNotification.Name?, 
          object obj: Any?, 
           queue: OperationQueue?, 
           using block: @escaping (Notification) -> Void) -> NSObjectProtocol

Notification Center에 Entry를 추가하여 제공된 블록으로 전달된 Notification을 수신한다.

  • forName : Observer 블록으로 전달하기 위해 등록할 Notification의 이름, sender는 Notification 이름을 전달 기준으로 사용하지 않는다.
  • object : Observer 블록으로 Notification을 보내는 객체, nil이면 Notification Center는 sender를 전달 기준으로 사용하지 않는다.
  • 특정 객체를 명시하면 명시한 객체가 발송한 Notification일 때에만 해당 이름의 Notification을 수신한다.
  • queue : 블록이 실행되는 작업 대기열, nil이면 동시에 실행된다.
  • block : Notification을 수신할 때 실행되는 블록, Observer를 삭제하기 전까지 Notification Center는 복사된 블록에 관해 강한 참조를 유지한다.

 

func addObserver(_ observer: Any, 
        selector aSelector: Selector, 
            name aName: NSNotification.Name?, 
          object anObject: Any?)

Notification Center에 Entry를 추가하여 제공된 selecter로 전달된 Notification을 수신한다.

  • observer : observer로 등록할 객체
  • selector : receiver가 observer에게 notification 발신에 관해 알려주기 위해 보내는 메세지를 지정, NSNotification의 인스턴스가 하나 이상 있어야 한다.
  • name : observer에게 전달하기 위해 등록할 Notifiacation의 이름
  • object : observer에게 Notification을 보내는 객체

 

func removeObserver(_ observer: Any, 
               name aName: NSNotification.Name?, 
             object anObject: Any?)

Notification Center의 dispatch table에서 일치하는 entry를 삭제한다.

  • observer : dispatch table에서 삭제할 observer
  • name : dispatch table에서 삭제할 notification
  • object : dispatch table에서 삭제할 sender

 

func removeObserver(_ observer: Any)

Notification Center의 dispatch table에서 지정한 observer에 해당하는 모든 entry를 삭제한다.

  • observer : dispatch table에서 삭제할 observer

 

Posting Notifications

func post(_ notification: Notification)

지정된 Notification을 Notification Center에 발송한다.

 

func post(name aName: NSNotification.Name, 
   object anObject: Any?, 
 userInfo aUserInfo: [AnyHashable : Any]? = nil)

지정된 이름, 보낸 객체, 유저 정보(optional)로 Notification을 만들어 Notification center에 발송한다.

 

func post(name aName: NSNotification.Name, 
   object anObject: Any?)

지정된 이름, 보낸 객체로 Notification을 만들어 Notification center에 발송한다.

 


Notification

Notification center를 통해 등록된 모든 observer에게 정보를 전달하기 위한 구조체이다.

Primary Property

var name: Notification.Name

알림을 식별하는 태그

var object: Any?

발송자가 observer에게 보내려고 하는 객체

var userInfo: [AnyHashable : Any]?

Notification과 관련된 값 또는 객체의 저장소(Storage)

 

부족한 점 피드백해주시면 감사합니다!

 

 

참고:

https://developer.apple.com/documentation/foundation/notificationcenter

https://developer.apple.com/documentation/foundation/notification

https://www.boostcourse.org/mo326/lecture/16919?isDesc=false

반응형