์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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
- designpattern
- Swfit
- rxcocoa
- UIKit
- XCTest
- tableView
- SnapKit
- SwiftUI
- realm
- reactorkit
- Lv2
- ํ๋ก๊ทธ๋๋จธ์ค
- Kuring
- node.js
- CollectionView
- TCA
- ios
- Flutter
- visionOS
- arkit
- BOJ
- ํจ์คํธ์บ ํผ์ค
- Xcode
- RxSwift
- MVVM
- raywenderlich
- combine
- ๋ฐฑ์ค
- BFS
- swift
Archives
- Today
- Total
lgvv98
iOSInterviewquestions - ARC ๋ณธ๋ฌธ
โ ๏ธ deprecated โ ๏ธ/๐ง๐ป๐ป iOSInterviewquestions
iOSInterviewquestions - ARC
๐ฅ ์บ๋ฟ๋งจ 2022. 4. 2. 03:02iOSInterviewquestions - ARC
๋ชฉ์ : ๋ฐฐ์ธ๋๋ ์ํ๋๋ฐ, ๋์ด๊ฐ ๋จน์ผ๋๊น ์๊พธ ๊น๋จน์ด์ ์๋ ๊นํ๋ธ ๊ธ์ ๋ฐํ์ผ๋ก ๊พธ์คํ ์ด๋ก ๊ณต๋ถ๋ฅผ ํ๊ณ ์ ํจ. ๋ฌผ๋ก ์ค๋ช ์ ๋ด๊ฐ ์ ์๋๊ฒ ๋ชฉ์ ์ด๋ผ ์ฒ ์ ํ ๋๋ฅผ ์ดํด์ํฌ ์ ์๋ ๋์ ์ธ์ด๋ก ์์ฑ.
์์ฑ์ผ : 2022๋ 4์ 2์ผ
- README: ์ถํ์ ์์ ์ด ์์ ๊ฒฝ์ฐ ์๋์ ๋ ์ง์ ์๊ฐ์ ์์ฑํ๊ณ , ์์ ๋ด์ฉ์ ๊ฐ๋ตํ ์ ๋ฆฌํด์ฃผ์ธ์.
์์)
(์์ ) oooo๋ oo์ oo์ผ oo์ oo๋ถ
- ๋ณ๊ฒฝ๋ด์ฉ : xxx์ ๋ํ ์๋ฃ๋ฅผ ๋ณด๊ฐ
โ ๊ณต๋ถ์ ๊ธฐ์ค์ด ๋๋ ๊นํ๋ธ ๊ธ
โ ARC
- ARC๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค.
- Auto Reference Count์ ์ฝ์๋ก ์ฑ์ ์ฐธ์กฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ๊ณผ๊ฑฐ Obj-c๋ฅผ ์ฌ์ฉํ ๋๋ release, retain ๋ฑ๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ฝ์ ํด ์ฃผ์์ง๋ง, ARC๋ ์ปดํ์ผ ํ์์ ์๋์ผ๋ก release, retain์ฝ๋๋ฅผ ์ฝ์ ํ๊ณ , ๋ฐํ์ ๋ ์ด๋ค์ ์คํํ์ฌ reference count๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋ง์ฝ reference count๊ฐ 0์ด ๋๋ฉด deinit์ ํตํด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค.
- (์ฐธ๊ณ ) https://github.com/SwiftFrequency/iOSInterview/issues/7
- Retain Count ๋ฐฉ์์ ๋ํด ์ค๋ช
ํ์์ค.
- ARC๋ ์๋์ผ๋ก reference count๋ฅผ ๊ด๋ฆฌํด ์ฃผ์๋ค๋ฉด, Retain count๋ MRC์์ ์ฌ์ฉ๋๋ ์ฉ์ด๋ก MRC๋ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ค. MRC์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๊ฐ ์ง์ count๋ฅผ ํด์ ์ธ์คํด์ค์ ๋ํ RC์ ์ ๊ทผํ ์ ์๋ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋๋ฐ, ๊ทธ ํ๋กํผํฐ ์ด๋ฆ์ด retainCount์ด๋ค. ๋ํ MRC๋ฅผ retain/release ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ MRR(Memory Retain Release)๋ผ๊ณ ๋ ๋ถ๋ฅด๋ ๊ฒ์ ๋ณด๋ฉด retain count๊ฐ ๋ง๋ค.
- (์ฐธ๊ณ ) https://babbab2.tistory.com/28
- Strong ๊ณผ Weak ์ฐธ์กฐ ๋ฐฉ์์ ๋ํด ์ค๋ช
ํ์์ค.
- strong : ๊ฐํจ์ฐธ์กฐ๋ก์จ ํด๋น ์ธ์คํด์ค์ ์์ ๊ถ์ ๊ฐ์ง๋ค. ์์ ์ด ์ฐธ์กฐํ๋ ์ธ์คํด์ค์ retain count๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ, ๊ฐ ์ง์ ์์ ์ retain์ด ๋๊ณ , ์ฐธ์กฐ๊ฐ ์ข ๋ฃ๋๋ ์์ ์ relase๊ฐ ๋๋ค. ์ ์ธํ ๋ ์๋ฌด๊ฒ๋ ์ ์ด์ฃผ์ง ์๋๋ค๋ฉด default๋ก strong์ด ๋๋ค.
- weak : ํด๋น ์ธ์คํด์ค์ ์์ ๊ถ์ ๊ฐ์ง ์๊ณ ์ฃผ์๊ฐ๋ง์ ๊ฐ๋ ํฌ์ธํฐ ๊ฐ๋ ์ด๋ค. ์์ ์ด ์ฐธ์กฐํ๋ ์ธ์คํด์ค์ retain count๋ฅผ ์ฆ๊ฐ์ํค์ง ์๋๋ค. relase๋ ๋ฐ์ํ์ง ์๋๋ค. ์์ ์ด ์ฐธ์กฐ๋ ํ์ง๋ง weak ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ์ํฌ ์ ์๋ ๊ถํ์ ๋ค๋ฅธ ํด๋์ค์ ์๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ ํผ๋ฐ์ค๊ฐ nil๋ก ์ด๊ธฐํ ํด์ค๋ค.
- unowned (๋ฏธ์์ ์ฐธ์กฐ/ ์ฝํ ์ฐธ์กฐ) : ํด๋น ์ธ์คํด์ค์ ์์ ๊ถ์ ๊ฐ์ง์ง ์๋๋ค. ์์ ์ด ์ฐธ์กฐํ๋ ์ธ์คํด์ค์ retian count๋ฅผ ์ฆ๊ฐ์ํค์ง ์๋๋ค. nil์ด ๋ ์ ์๋ค. optional๋ก ์ ์ธ๋์ด์๋ ์๋๋ค.
-
// ๊ฐํ์ฐธ์กฐ var test = Test() // retain count 1์ฆ๊ฐ test = nil // retain count๊ฐ 1 ๊ฐ์๋์ด์ 0์ด ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค. // ์ฝํ์ฐธ์กฐ weak var test = Test() // ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง๋ง, weak์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก๊ฐ์ฒด๊ฐ ํด์ ๋์ด nil์ด ๋๋ค. // unouned unowned var test = Test() // ๊ฐ์ฒด ์์ฑ๊ณผ ๋์์ ํด์ ๋๊ณ ๋๊ธ๋ง ํฌ์ธํธ๋ง ๊ฐ๊ณ ์์. ์๋ฌ๊ฐ ๋๋ค.
- [weak๊ณผ unowned์ ์ฐจ์ด]
- weak์ ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ถ์ ํ๋ฉด์ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ฉด nil๋ก ๋ฐ๊พผ๋ค.
- ํ์ง๋ง unowned๋ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ฉด ๋๊ธ๋ง ํฌ์ธํฐ๊ฐ ๋จ๋๋ค. ์ด ๋๊ธ๋ง ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด crash๊ฐ ๋๋๋ฐ, ์ด ๋๋ฌธ์ unowned๋ ์ฌ๋ผ์ง์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅ๋๋ ๊ฐ์ฒด์๋ง ์ค์ ํ์ฌ์ผ ํ๋ค.
- ๋๊ธ๋ง ํฌ์ธํฐ๋? : ์๋ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ฒด๊ฐ ํด์ ๋๋ฉด์ ํ ๋น๋์ง ์๋ ๊ณต๊ฐ์ ๋ฐ๋ผ๋ณด๋ ํฌ์ธํฐ
- ๊ฐ๊ฐ์ ์ฌ์ฉ ์ํฉ
- strong : ๋ ํผ๋ฐ์ค ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์์ผ ARC๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํผํ๊ณ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฐ์
- weak : ๋ํ์ ์ผ๋ก retian cycle์ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์๋๋ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด์ ์ฌ์ฉ๋๊ณ delegate ํจํด์ด ์๋ค.
- unowned : ๊ฐ์ฒด์ ๋ผ์ดํ์ฌ์ดํด์ด ๋ช ํํ๊ณ ๊ฐ๋ฐ์์ ์ํด ์ ์ด ๊ธฐ๋ฅ์ด ๋ช ํํ ๊ฒฝ์ฐ, weak optional ํ์ ๋์ ์ฌ์ฉํ์ฌ ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ฝํ ์ฐธ์กฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ weak ํค์๋๋ง ์ฌ์ฉํ๊ณ guard let ๋๋ if let์ ํตํ์ฌ ์์ ํ๊ฒ ์ต์ ๋์ ์ถ์ถํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
- (์ฐธ๊ณ ) https://devsrkim.tistory.com/entry/Swift-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC-%EC%B0%B8%EC%A1%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-Strong-Weak-Unowned
- ์ํ ์ฐธ์กฐ์ ๋ํ์ฌ ์ค๋ช
ํ์์ค.
- ์๋ก๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ARC๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋์์ฃผ์ง๋ง ์ํ ์ฐธ์กฐ์ ๋น ์ง ์ ์๋ค.
-
class VC1 { let vc2 = VC2() } class VC2 { weak var delegate: VC1 }
- VC1์ด VC2๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ณ , VC2์์๋ weak๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ retain count๊ฐ ์ฆ๊ฐํ์ง ์์์ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ๊ฐํ ์ํ ์ฐธ์กฐ (Strong Reference Cycle) ๋ ์ด๋ค ๊ฒฝ์ฐ์ ๋ฐ์ํ๋์ง ์ค๋ช
ํ์์ค.
-
class Person { var name = "lgvv" var car: Car? } class Car { var model: String var lessee: String init(model: String) { self.model = model } } var teacher: Person? = Person() var rentedCar: Car? = Car(model: "Benz") teacher?.car = rentedCar rentedCar?.lessee = teacher teacher = nil rentedCar = nil
- Rx๋ฅผ ์ฌ์ฉํ ์์๋ bind, map ๋ฑ์์ self๋ฅผ ์ฌ์ฉํ ๋ weak์ ํด์ฃผ์ง ์์์ ๋ฐ์ํ๋ค.
- (์ฐธ๊ณ ) https://beenii.tistory.com/115
-
'โ ๏ธ deprecated โ ๏ธ > ๐ง๐ปโ๐ป iOSInterviewquestions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
iOSInterviewquestions - iOS (0) | 2022.04.06 |
---|---|
iOSInterviewquestions - Rx (0) | 2022.04.02 |
iOSInterviewquestions - Swift (0) | 2022.04.02 |
iOSInterviewquestions - Autolayout (0) | 2022.04.02 |
Comments