Notification Center의 post는
동기적으로 동작하죠
post a
post b
를 했다면
a의 옵저버함수가 끝날때까지
b를 실행하지 않아요
옵저버함수가 실행이 오래걸린다면
마냥 기다릴순 없으니..!
비동기적인 API가 있는데요
바로바로
Notification Queue!!
가 있는데
한번 사용해보려구요 ㅎㅎ
Notification Center의 버퍼다!
다른건 아니고
NotificationCenter에 들어오는 post를 관리해주는거라고생각해요
이벤트 등록을 할때
Notification Center를 이용해서 옵저버를 등록하거든요 ㅎㅎ
기본적인 사용법은
let center = NotificationCenter.default
let queue = NotificationQueue.default
center.addObserver(self, selector: #selector(self.bObserver), name: .b, object: nil)
queue.enqueue(Notification(name: .a), postingStyle: .now)
이벤트 발생post는
queue.enqueue를 이용하고
이벤트 등록은
center.addObserver를 이용해요
notification 파라미터엔 post할 notification을 넣어주고
postingStyle이라는게 있어요
하나씩 비교해볼까요?
now
합체이후? 즉시 post한다
Notification Center같이 동기동작(지금당장 실행해!)
asap
현재 notification이 끝나거나 타이머가 끝난뒤 post한다
코드가 끝난뒤 마지막에 실행해라!
whenIdle
유휴상태일때 즉, 아무동작없이 쉬고있을때 post한다
아무것도 없으면 실행해라!
무슨소린가...
가볍게 테스트를 해봤어요
extension Notification.Name {
static let a = Notification.Name("a")
static let b = Notification.Name("b")
}
func test() {
let center = NotificationCenter.default
let queue = NotificationQueue.default
center.addObserver(self, selector: #selector(self.aObserver), name: .a, object: nil)
center.addObserver(self, selector: #selector(self.bObserver), name: .b, object: nil)
print("post a")
queue.enqueue(Notification(name: .a), postingStyle: .asap)
print("post b")
queue.enqueue(Notification(name: .b), postingStyle: .asap)
print("finish")
}
@objc
func aObserver() {
print("A pig...")
(0...10).forEach { _ in print("🐷") }
print("A end")
}
@objc
func bObserver() {
print("B dog...")
(0...10).forEach { _ in print("🐶") }
print("B end")
}
a - asap
b - asap
해당하는 notification이 다 호출된뒤에
옵저버에 등록한 함수가 실행되네요
a - now
b - asap
a가 다 실행된 이후에
코드들이 실행되고
마지막에 옵저버에 등록한 b함수가 실행되네요
a - whenIdle
b - asap
코드실행이 다 되고
마지막에 b옵저버가 실행되고
아예끝나고 아무것도 없으니 a옵저버가 실행되네요
차이가 느껴지시나요 ㅎㅎ..
우선순위가
now > asap > whenIdle
인거 같구요
아무튼!
Notification Queue를 사용할땐 now를 쓰면 Center쓰는것과 같으니 주의할것..!
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] Hugging, Resistance (0) | 2020.11.25 |
---|---|
[Swift] Optional 옵셔널 (0) | 2020.11.25 |
[Swift] Fastlane 자동화빌드 배포 CI/CD (2/2) (0) | 2020.11.19 |
[Swift] Fastlane 자동화빌드 배포 CI/CD (1/2) (0) | 2020.11.19 |
[Swift] Custom View 만들기 (1) | 2020.11.12 |