You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
self 값에 대한 참조에 있어서 weak를 이용한 순환 참조 해결
클로저의 캡처 리스트에 있어서 참조 타입(Class)의 레퍼런스 카운트 주의
특히 UI 관련 사이드 이펙트에 있어서 주의
edit scheme - Diagnostics - malloc 설정으로 해당 앱 실행에 있어서 메모리 leak 체크 가능
[weak self] 와 같은 귀찮은 코드를 하지 않더라도, 종료조건이나 시점을 통제함으로써 메모리를 관리할 수 있다.
3. Thread/Scheduler 분기
observeOn(원하는 시점 부터), subscribeOn(구독 시작 부터) 메서드를 사용하여 UX에 있어서 비동기적인 활용을 위한 thread 컨트롤
4. Stream의 병합 및 공유
병합
combine, merge, zip을 활용하여 Observable 병합
공유
1개의 이벤트를 여러 Observer가 구독하여 공유, observing하기 전 과거 elements를 어떻게 다룰지(replay)와 언제 공유할지(refCount)가 필요, replay(1).refCount(), 합쳐서 share(replay: 1)로 사용
[3교시] RxSwift 활용범위 넓히기 - UI 컴포넌트와의 연동
1. Subject
bridge 또는 proxy로 Observable, Observer 두 가지 역할을 모두 할 수 있다
실제로 Observable을 subscribe하며, item을 observer에게 reemitting한다
Data Control
BehaviorSubject
초기값 사용 가능하며, Observer가 subscribe할 때 가장 최근에 emit했던 item을 emit한다
그 뒤로 계속 item emitting이 일어남
source Observable이 error로 없어지면 BehaviorSubject도 item이 아닌 error를 뱉음
PublishSubject
Observer가 subscribe한 이 후의 내보내진 item만 뱉는다
따라서 PubliishSubject의 생성시간과 Observer의 subscribe 생성시간 사이의 item은 다루지 못하는 경우가 발생할 수 있다
ReplaySubject
Observer가 언제 subscribe한지와 관계없이 전에 내보냈던 모든 item을 내보낸다
버퍼의 크기 또는 내보낸 시간에 따라서 오래된 item을 버리는 버전도 있다
AsyncSubject
source Obsevable이 complete된 이후 가장 마지막으로 내보내진 item을 Observer에게 뱉는다
Hot Observable / Cold Observable
Observable이 언제부터 item을 내보내는지에 대한 문제
공유 방식의 차이 존재 - 스트림 분기가 필요한 경우 subject같은 Hot Observable을 사용해 subscription을 공유
Hot
생성하자마자 item을 내보낼 수 있는 Observable
따라서 나중에 subscribe한 Observer는 Sequence의 중간부터 시작한다
Hot의 경우 자원을 공유한다 - Observer들은 하나의 스트림으로 연결되어 있다
Cold
한 Observer가 subscribe하기 전까지 기다린다
Observer는 처음부터 모든 Sequence를 볼 수 있다
Cold의 경우 Observer당 자원이 할당된다 - Observer당 각 하나의 스트림이 생겨난다
2. RxCocoa
UI 작업의 특징
데이터로 인한 에러가 발생하는 것을 방지하고 스레드 관리에 있어서 편리함을 주기 위해서 RxCocoa에서 제공하는 특성화된 메서드를 활용
Observable / Driver
Driver는 UI layer에서 좀 더 직관적으로 사용하도록 제공하는 unit
Driver는 항상 MainScheduler에서 사용
asDriver를 통해 구독하는 이벤트에 대해서 UI 특화적으로 구성이 가능
onError가 발생하지 않는다
subscription 공유도 상황에 따라선 가능(share(replay:1, scope: .whileConnected))
Subject / Relay
Relay는 complete, error를 내보내지 않는다
그 이외의 점은 subject와 동일하며 이름을 통해 어떤 subject 처럼 동작하는지 알 수 있다
next 이벤트만 발생시키고, dispose전까지 없어지지 않는다
따라서 Observable보다 Driver가 UI에 적합하듯이 UI에는 Subject보다 Relay가 더 적합하다
next 이벤트를 발생시킬때는 accept를 사용하며, UI에 사용할때는 bind를 사용한다
PublishRelay
PublishSubject의 특성처럼 구독 이후의 발생하는 이벤트들만 알 수 있다
BehaviorRelay
초기값을 가지고 생성
value()를 사용해 현재의 값을 꺼낼 수 있다(읽기 전용)
현재의 값을 변경하기 위해서 .accept()를 사용
ReplayRelay
ReplaySubject 처럼 bufferSize만큼 최신이벤트를 전달한다
The text was updated successfully, but these errors were encountered:
[1교시] 개념잡기 - RxSwift를 사용한 비동기 프로그래밍
1. Observable & Sugar API
[2교시] RxSwift 활용하기 - 쓰레드의 활용과 메모리 관리
1. Observable Life-Cycle
Observable은 subscription을 받기 전까진 아무 짓도 하지 않은채 값을 가지고만 있다.
즉, subscription이 Observable이 이벤트들을 방출하도록 해줄 방아쇠 역할을 한다
2. 순환 참조와 메모리 관리
self 값에 대한 참조에 있어서 weak를 이용한 순환 참조 해결
클로저의 캡처 리스트에 있어서 참조 타입(Class)의 레퍼런스 카운트 주의
특히 UI 관련 사이드 이펙트에 있어서 주의
edit scheme - Diagnostics - malloc 설정으로 해당 앱 실행에 있어서 메모리 leak 체크 가능
[weak self] 와 같은 귀찮은 코드를 하지 않더라도, 종료조건이나 시점을 통제함으로써 메모리를 관리할 수 있다.
3. Thread/Scheduler 분기
observeOn(원하는 시점 부터), subscribeOn(구독 시작 부터) 메서드를 사용하여 UX에 있어서 비동기적인 활용을 위한 thread 컨트롤
4. Stream의 병합 및 공유
[3교시] RxSwift 활용범위 넓히기 - UI 컴포넌트와의 연동
1. Subject
bridge 또는 proxy로 Observable, Observer 두 가지 역할을 모두 할 수 있다
실제로 Observable을 subscribe하며, item을 observer에게 reemitting한다
Data Control
Hot Observable / Cold Observable
Observable이 언제부터 item을 내보내는지에 대한 문제
공유 방식의 차이 존재 - 스트림 분기가 필요한 경우 subject같은 Hot Observable을 사용해 subscription을 공유
2. RxCocoa
UI 작업의 특징
데이터로 인한 에러가 발생하는 것을 방지하고 스레드 관리에 있어서 편리함을 주기 위해서 RxCocoa에서 제공하는 특성화된 메서드를 활용
Observable / Driver
Driver는 UI layer에서 좀 더 직관적으로 사용하도록 제공하는 unit
Driver는 항상 MainScheduler에서 사용
asDriver를 통해 구독하는 이벤트에 대해서 UI 특화적으로 구성이 가능
onError가 발생하지 않는다
subscription 공유도 상황에 따라선 가능(share(replay:1, scope: .whileConnected))
Subject / Relay
Relay는 complete, error를 내보내지 않는다
그 이외의 점은 subject와 동일하며 이름을 통해 어떤 subject 처럼 동작하는지 알 수 있다
next 이벤트만 발생시키고, dispose전까지 없어지지 않는다
따라서 Observable보다 Driver가 UI에 적합하듯이 UI에는 Subject보다 Relay가 더 적합하다
next 이벤트를 발생시킬때는 accept를 사용하며, UI에 사용할때는 bind를 사용한다
The text was updated successfully, but these errors were encountered: