[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift

[Swift] NotificationCenter

inu 2022. 3. 7. 21:26
반응형

NotificationCenter

  • NotificationCenter는 등록된 Observer에게 정보를 broadcast해주는 역할을 수행합니다.
  • addObserver(_:selector:name:object:) 혹은 addObserver(forName:object:queue:using:) 메서드를 통해 알림(NSNotification 객체)을 받을 객체를 등록할 수 있습니다. 이 때 어떤 알림을 받아야하는지도 지정합니다. 따라서 하나의 객체에 이 메서드를 여러번 호출하는 것으로 여러 알림에 대한 Observer 역할을 하나의 객체가 동시에 수행하도록 할 수 있습니다.
  • 실행중인 각 앱마다 default notification center가 존재하며, 필요할 경우 새로운 notification center를 만들 수도 있습니다.
  • notification center는 단일 프로그램 내에서만 알림을 전달할 수 있습니다. 다른 프로세스에 알림을 전달하거나 받기위해서는 DistributedNotificationCenter이라는 것을 사용해야합니다.

동작 방식

https://ios-development.tistory.com/146

  • 특정 객체에서 Notification 내부의 Event를 발생시키면 등록된 Observer들에 Event가 전달되면서 그에 대한 행동을 취하도록 설계되어 있습니다.
  • 따라서 하나의 객체에서 여러 객체로 동시에 이벤트를 전달할 때 유용하게 사용할 수 있습니다.

NSNotification

  • 알림의 내용을 포함하는 객체입니다. 해당 객체를 Observer에게 내보내는 것으로 정보를 전달합니다.
  • 내부적으로 name, object, userInfo를 포함하고 있습니다.

addObserver method

  • 해당 메서드를 통해 새로운 observer를 추가할 수 있습니다.

  • forName name : 알림의 이름입니다. 이를 통해 알림을 식별하게 됩니다. nil일 경우 알림을 확인할 때 이름을 판별기준으로 삼지 않습니다.
  • object obj : 알림의 발신자입니다. 설정할 경우 이 발신자에서 온 알림만 확인 가능해집니다. nil일 경우 알림을 확인할 때 발신자를 판별기준으로 삼지 않습니다.
  • queue : 알림을 받고 block이 실행될 operation queue입니다. nil일 경우 현 스레드에서 동기적으로 처리됩니다.
  • using block : 알림이 왔을 때 실행될 block입니다. notification center는 이를 copy합니다. copy된 block은 observer 등록이 사라지기 전까지 유지됩니다.

  • observer : observer로 등록할 객체입니다.
  • selector aSelector : observer가 알림을 보내면 수행할 내용을
  • name aName : 알림의 이름입니다. 이를 통해 알림을 식별하게 됩니다. nil일 경우 알림을 확인할 때 이름을 판별기준으로 삼지 않습니다.
  • anObject : 알림의 발신자입니다. 설정할 경우 이 발신자에서 온 알림만 확인 가능해집니다. nil일 경우 알림을 확인할 때 발신자를 판별기준으로 삼지 않습니다.

post method

  • 해당 메서드를 통해 알림을 보낼 수 있습니다.
  • aName : 알림의 이름
  • anObject : 알림의 발신자
  • aUserInfo : user의 정보를 담는 dictionary. 알림에 대한 추가정보를 넣습니다.

참고

반응형

'🍎 Apple > Swift' 카테고리의 다른 글

[Swift] Localizing (NSLocalizedString)  (5) 2022.04.10
[Swift] Generic  (0) 2022.03.07
[Swift] KVC(Key-Value Coding), KVO(Key-Value Observing)  (0) 2022.03.01
[Swift] Monad  (0) 2022.03.01
[Swift] Property Wrapper  (0) 2022.02.24