Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

iOSInterviewquestions - ARC ๋ณธ๋ฌธ

โš ๏ธ deprecated โš ๏ธ/๐Ÿง‘๐Ÿป‍๐Ÿ’ป iOSInterviewquestions

iOSInterviewquestions - ARC

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 2. 03:02

iOSInterviewquestions - ARC

 

๋ชฉ์  : ๋ฐฐ์šธ๋•Œ๋Š” ์ž˜ํ–ˆ๋Š”๋ฐ, ๋‚˜์ด๊ฐ€ ๋จน์œผ๋‹ˆ๊นŒ ์ž๊พธ ๊นŒ๋จน์–ด์„œ ์•„๋ž˜ ๊นƒํ—ˆ๋ธŒ ๊ธ€์„ ๋ฐ”ํƒ•์œผ๋กœ ๊พธ์ค€ํžˆ ์ด๋ก  ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ ์ž ํ•จ. ๋ฌผ๋ก  ์„ค๋ช…์€ ๋‚ด๊ฐ€ ์ž˜ ์•„๋Š”๊ฒŒ ๋ชฉ์ ์ด๋ผ ์ฒ ์ €ํžˆ ๋‚˜๋ฅผ ์ดํ•ด์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋‚˜์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ.

 

์ž‘์„ฑ์ผ : 2022๋…„ 4์›” 2์ผ 

 - README: ์ถ”ํ›„์— ์ˆ˜์ •์ด ์žˆ์„ ๊ฒฝ์šฐ ์•„๋ž˜์— ๋‚ ์งœ์™€ ์‹œ๊ฐ์„ ์ž‘์„ฑํ•˜๊ณ , ์ˆ˜์ • ๋‚ด์šฉ์„ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด์ฃผ์„ธ์š”.

 

์˜ˆ์‹œ)

(์ˆ˜์ •) oooo๋…„ oo์›” oo์ผ oo์‹œ oo๋ถ„ 

 - ๋ณ€๊ฒฝ๋‚ด์šฉ : xxx์— ๋Œ€ํ•œ ์ž๋ฃŒ๋ฅผ ๋ณด๊ฐ•

 

โœ… ๊ณต๋ถ€์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ๊นƒํ—ˆ๋ธŒ ๊ธ€

https://github.com/JeaSungLEE/iOSInterviewquestions

 

GitHub - JeaSungLEE/iOSInterviewquestions: ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปiOS ๋ฉด์ ‘์— ๋‚˜์˜ฌ ์งˆ๋ฌธ๋“ค ์ด ์ •๋ฆฌ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปiOS ๋ฉด์ ‘์— ๋‚˜์˜ฌ ์งˆ๋ฌธ๋“ค ์ด ์ •๋ฆฌ . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

 

โœ… 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