Skip to content

Commit 2d9c3fe

Browse files
committed
Create 250623_RxCocoa,_Driver,_ asDriver,_memory_leak.md
1 parent 103dd3d commit 2d9c3fe

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# 250623 RxCocoa, Driver, asDriver, memory leak
2+
3+
RxCocoa Driver์˜ ๋‚ด๋ถ€ sharing ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
4+
5+
6์›” 23์ผ (์›”)
6+
7+
# ํ•™์Šต๋‚ด์šฉ
8+
9+
- **RxCocoa Driver์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ**
10+
- Driver๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ `.share(replay: 1, scope: .whileConnected)` ์‚ฌ์šฉ
11+
- MainScheduler์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์—๋Ÿฌ๋ฅผ catchํ•˜๋Š” ํŽธ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต
12+
- ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๊ณต์œ  Observable์„ ์ƒ์„ฑํ•˜์—ฌ ์ค‘๋ณต ๊ตฌ๋… ๋ฐฉ์ง€
13+
14+
- **Driver์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜**
15+
- ์…€ ์žฌ์‚ฌ์šฉ ์‹œ `disposeBag = DisposeBag()` ํ˜ธ์ถœ๋กœ ๊ฐœ๋ณ„ ๊ตฌ๋…์€ ํ•ด์ œ๋˜์ง€๋งŒ
16+
- Driver์˜ ๊ณต์œ  Observable(`.whileConnected`)์€ ๋ชจ๋“  ๊ตฌ๋…์ž๊ฐ€ ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€
17+
- ๋นˆ๋ฒˆํ•œ ์…€ ์ƒ์„ฑ/ํ•ด์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ตฌ๋…์ž๊ฐ€ ์™„์ „ํžˆ 0์ด ๋˜๋Š” ์ˆœ๊ฐ„์ด ์—†์–ด ๋ˆ„์ ๋จ
18+
19+
- **๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ฆ์ƒ**
20+
```
21+
ShareReplay1WhileConnectedConnection<AVPlayerTimeControlStatus>
22+
CatchSink<ShareReplay1WhileConnectedConnection<AVPlayerTimeControlStatus>>
23+
AtomicInt (๋‹ค์ˆ˜)
24+
KVOObserver (๋‹ค์ˆ˜)
25+
```
26+
27+
# ๊ณ ๋ฏผํ•œ ์  / ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
28+
29+
- **๋ฌธ์ œ ์ƒํ™ฉ**
30+
- NextHomeViewController ์Šคํฌ๋กค ์‹œ ์ง€์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ
31+
- SimpleVideoPlayerView์—์„œ AVPlayer์˜ timeControlStatus ๊ตฌ๋… ์‹œ Driver ์‚ฌ์šฉ
32+
- ์ปฌ๋ ‰์…˜๋ทฐ ์…€์˜ ๋นˆ๋ฒˆํ•œ ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ 
33+
34+
- **์‹œ๋„ํ–ˆ๋˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋“ค**
35+
1. **AVPlayer+Rx.swift KVO ์ˆ˜์ •**: `observe()` โ†’ `observeWeakly()` โ†’ ์ด๋ฒคํŠธ ๋ฏธ๋ฐœ์ƒ
36+
2. **์ง์ ‘ KVO ๊ตฌํ˜„**: `player.observe(\.timeControlStatus)` โ†’ ์ด๋ฒคํŠธ ๋ฏธ๋ฐœ์ƒ
37+
3. **Observable.create๋กœ ๋ž˜ํ•‘**: ๋ณต์žก์„ฑ ์ฆ๊ฐ€ ๋ฐ ํšจ๊ณผ ์ œํ•œ์ 
38+
39+
- **์ตœ์ข… ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**
40+
```swift
41+
// ๊ธฐ์กด ๋ฌธ์ œ ์ฝ”๋“œ
42+
videoPlayer.rx.timeControlStatus
43+
.asDriver(onErrorJustReturn: .paused) // ๐Ÿšจ Driver์˜ ๋‚ด๋ถ€ sharing
44+
.distinctUntilChanged()
45+
.drive(onNext: { ... })
46+
47+
// ์ˆ˜์ •๋œ ์ฝ”๋“œ
48+
videoPlayer.rx.timeControlStatus
49+
.distinctUntilChanged()
50+
.observe(on: MainScheduler.instance) // ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ณด์žฅ
51+
.subscribe(onNext: { ... })
52+
```
53+
54+
- **ํ•ต์‹ฌ ์›๋ฆฌ**
55+
- Driver ์ œ๊ฑฐ๋กœ ๋‚ด๋ถ€ sharing ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํšŒํ”ผ
56+
- ๊ฐ ์…€๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ KVO ๊ตฌ๋… ์ƒ์„ฑ
57+
- `disposeBag = DisposeBag()` ์‹œ ์™„์ „ํ•œ ๊ตฌ๋… ํ•ด์ œ ๋ณด์žฅ
58+
59+
# ๋А๋‚€์ 
60+
61+
- **RxCocoa์˜ ํŽธ์˜์„ฑ๊ณผ ํ•จ์ •**
62+
- Driver, Signal ๋“ฑ์˜ ํŽธ์˜ ๊ธฐ๋Šฅ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์žกํ•œ sharing ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์‚ฌ์šฉ
63+
- ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์ด ๋˜์ง€๋งŒ, ํŠน์ • ์ƒํ™ฉ์—์„œ๋Š” ์˜คํžˆ๋ ค ๋…์ด ๋  ์ˆ˜ ์žˆ์Œ
64+
- ๋‹จ์ˆœํžˆ "ํŽธ๋ฆฌํ•˜๋‹ค"๋Š” ์ด์œ ๋กœ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋จ
65+
66+
- **๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ**
67+
- `disposeBag = DisposeBag()`๋งŒ์œผ๋กœ๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ
68+
- RxSwift ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ดํ•ดํ•ด์•ผ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
69+
- Observable์˜ ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ sharing ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด ํ•„์š”
70+
71+
- **์ ์ ˆํ•œ ๋„๊ตฌ ์„ ํƒ์˜ ์ค‘์š”์„ฑ**
72+
- ์ปฌ๋ ‰์…˜๋ทฐ ์…€์ฒ˜๋Ÿผ ๋นˆ๋ฒˆํ•œ ์ƒ์„ฑ/ํ•ด์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” Driver๋ณด๋‹ค ์ผ๋ฐ˜ Observable์ด ์ ํ•ฉ
73+
- ์ƒํ™ฉ์— ๋งž๋Š” ๋„๊ตฌ ์„ ํƒ์ด ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์— ์ง๊ฒฐ๋จ
74+
- ์ฝ”๋“œ์˜ "๊ฐ„๊ฒฐํ•จ"๋ณด๋‹ค "์•ˆ์ •์„ฑ"์ด ์šฐ์„ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
75+
76+
---
77+
78+
# ์ฐธ๊ณ  ๋งํฌ
79+
80+
- [https://github.com/ReactiveX/RxSwift/blob/main/RxCocoa/Traits/Driver/Driver.swift](https://github.com/ReactiveX/RxSwift/blob/main/RxCocoa/Traits/Driver/Driver.swift)
81+
- [https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Traits.md](https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Traits.md)

0 commit comments

Comments
ย (0)