티스토리 뷰

TIL

[TIL] 2022 / 10 / 25 - Rx

희철 2022. 10. 25. 18:29

Disposable

 

 

리소스를 정리

 

subscribe중인 Stream을 원하는 시기에 처리할 수 있도록 도와줌

 

항상 마지막에 dispose가 붙는 것을 알 수 있음

-> Observable은 모두 Disposable을 리턴하기 때문임

-> 이를 통해 Stream을 종료하고 실행되던걸 종료함.

 

Observable의 next 이벤트 emit이 끝나면 disposed로 인해 자동으로 종료(리소스 해제)됨

-> 근데 인터벌의 경우를 생각하면 화면이 dismiss되더라도 disposed되지않음

-> 이때 deinit이 정상적으로 되면 disposed도 정상적으로 동작함

-> 순환참조 신경 잘 쓰기

 

만약 루트뷰컨트롤러인 경우에는 메모리에서 해제되지 않음

 

위의 두 경우는 직접 관리를 해줘야함.

-> disposed 메서드를 직접 호출해서 리소스 정리

 

근데 개수가 너무 많다면 하나하나 직접 dispose 실행하기는 어려움

-> DisposeBag의 인스턴스를 초기화하면 한 번에 정리가능

 

 

 

Subject

 

옵저버블은 이벤트를 생성하고 전달하는 역할만 함

 

즉, 새로운 값을 옵저버블에 추가할 수 없음

 

이벤트를 전달할 수도 있고, 처리할 수도 있는 것이 Subject

 

Subject는 subscribe를 여러 번하더라도 실행이 내부적으로 공유

-> 옵저버블은 여러 번 subscribe해도 독립적인 실행

 

즉, 옵저버블에서 구독을 하면 이벤트로 전달되는 것은 항상 새로운 것이라고함

 

 

PublishSubject

 

 

초기값이 없는 빈상태 

 

subscribe 이전 / error / complete 이후의 이벤트는 모두 무시

 

 

BehaviorSubject

 

 

PublishSubject와 달리 초기값이 반드시 필요함

-> Subscribe이전에 emit한 이벤트가 있다면, 가장 마지막으로 전달된 이벤트를 전달받기때문

-> 그래서 이전에 emit한 이벤트가 없다면 설정한 초기값을 전달하는 것.

 

뷰를 미리 채우는 용도 등으로 사용할 수 있음

 

 

 

ReplaySubject

 

 

위의 두 가지와 달리 bufferSize라는 파라미터를 받음

 

이 버퍼사이즈에 작성된 수만큼 메모리에 이벤트를 가지고 있다가 subscribe가 되면 한 번에 이벤트 전달함

 

오류가 발생하게되어도 보유한 이벤트 emit하고 에러 표시

 

근데 너무 많은 양의 버퍼를 갖고 있으면 메모리 부하 발생하므로 적당하게

 

 

AsyncSubject

 

 

completed 이벤트가 전달되기 전까지는 어떠한 이벤트도 전달하지 않음

 

completed 이벤트가 전달되었을때, 가장 마지막에 전달된 next 이벤트를 함께 전달

 

잘 안쓰는듯

 

 

'TIL' 카테고리의 다른 글

[TIL] 2022 / 10 / 27 - Rx  (0) 2022.10.27
[TIL] 2022 / 10 / 26 - Rx  (0) 2022.10.26
[TIL] 2022 / 10 / 24 - Rx  (0) 2022.10.24
[TIL] 2022 / 10 / 13 - Realm Migration  (1) 2022.10.13
[TIL] 2022/ 10 / 12 - Remote Notification, Method Swizzling  (0) 2022.10.12
댓글
최근에 올라온 글
Total
Today
Yesterday