[iOS] Notification Center
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