Notice
Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- firebase
- 앱의생명주기
- 프로그래머스
- 코딩테스트입문
- algorithm
- RC
- ARC
- mrc
- Di
- IOS
- AutoLayout
- RxSwift
- unittest
- Safari Inspector
- 카카오맵클론
- hackerrank
- 반응형프레임워크
- HackersRank
- TDD
- ios면접
- UIKit
- Swift코딩테스트
- firestore
- 시험에자주나오는것만
- ReactorKit UnitTest
- Bubble Search
- Swift디자인패턴
- SWIFT
- alamofire
- iOS앱 디버깅
Archives
- Today
- Total
샘성의 iOS 개발 일지
NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오. 본문
728x90
1. NotificationCenter 동작 방식
Notification에 등록된 이벤트가 발생되면 NotificationCenter에 등록된 Observers 중 해당 Notification을 담당하는 Observer가 해당 되는 이벤트에 대한 액션(#selector로 정의된)을 취하는 방식으로 동작한다. Delegate와는 다르게 등록된 하나의 이벤트에 대해 여러개의 옵저버가 구독할 수 있다.
2. NotificationCenter 활용 방안
이벤트 발생 시, 이를 알릴 수 있고 관심이 있는 객체들은 해당 이벤트를 구독하여 처리할 수 있다. (하나의 이벤트를 여러개의 객체가 구독할 수 있음)
사용자가 로그인할 때마다 "로그인 완료"라는 이벤트를 발생시키고, 다른 객체들은 이 이벤트를 받아서 로그인 완료 후의 작업을 처리해야 한다고 가정한다면,
- 이벤트 발생: 로그인이 완료되면, 이벤트를 발생시킴. 이를 위해 NotificationCenter에 "로그인 완료"라는 이름의 이벤트를 발송자로 등록한다.
- 이벤트 수신: 로그인 상태를 알아야 하는 객체들은 NotificationCenter에 자신을 등록하여 "로그인 완료" 이벤트를 구독. 이렇게 등록된 객체들은 이벤트가 발생하면 자동으로 알림을 받게 된다.
- 이벤트 처리: 이벤트를 받은 객체들은 해당 이벤트에 대한 처리를 수행. 예를 들어, 사용자 정보를 업데이트하거나 화면을 갱신하는 등의 작업을 할 수 있다.
3. NotificationCenter 사용 시 주의점
- 일대다 통신이기 때문에 하나의 이벤트에 대해 여러개의 옵저버가 중복사용 될 수 있으므로 생기는 메모리 관리 주의점
- 더이상 구독하지 않아도 되는 이벤트에 대해 ViewWillDisappear, ViewDidDisapper 등의 View의 생명주기에 사용되는 함수를 활용하여 옵저버를 제거해야한다.
- 반대로, 같은 객체가 하나의 이벤트에 대한 중복 구독 및 중복 구독 해제 되는 것 주의 또한 필요.
- 여러 쓰레드에서 동시에 이벤트를 발생시키고 받을 수 있기에, Thread-Safe 하지 않다. 여러개의 객체가 NotificationCenter 내부상태에 동시에 접근하는 경우 충돌 발생 가능성이 있음. - 수신자(구독자)와 송신자의 위치를 찾는 것이 쉽지 않음.
- 앱 내 아무데서나 특정 이벤트가 생기면, 해당 이벤트를 구독한 Observer들에 구현된 #selector 함수를 실행하는 방식이기 때문에, 앱 내 어디서 해당 이벤트가 생겼는지 찾기 힘든 경우가 있으므로 주의 필요.
728x90
'iOS > 면접' 카테고리의 다른 글
Hugging, Resistance에 대해서 설명하시오. (0) | 2023.06.13 |
---|---|
App Bundle의 구조와 역할에 대해 설명하시오. (0) | 2023.06.07 |
앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? (1) | 2023.06.03 |
App thinning에 대해서 설명하시오. (0) | 2023.06.03 |
앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가? (1) | 2023.06.03 |