[Swift] unowned vs weak

2023. 11. 14. 16:57ยท๐ŸŽ Dev/Swift

 

ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์€ iOS ๋ฉด์ ‘์Šคํ„ฐ๋”” SweepSwift์—์„œ ์ง„ํ–‰ํ•œ ์งˆ๋ฌธ ์ค‘ ์ œ๊ฐ€ ๋‹ด๋‹น ํ–ˆ๋˜ ์งˆ๋ฌธ์˜ ๋‹ต๋ณ€ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ๋ณด๊ฐ•ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

 


 

 

๐Ÿ”ด unowned์™€ weak์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”.

์บก์ฒ˜ ๋ฆฌ์ŠคํŠธ, ๊ฐ์ฒด๊ฐ„์˜ ์ฐธ์กฐ ๋“ฑ์˜ ๊ฒฝ์šฐ์ธ ๊ฐ•ํ•œ ์ฐธ์กฐ ์ˆœํ™˜(Strong Reference Cycle)๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ฐธ์กฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ“Œ unowned

 

  1. unwoned๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ’(value)์ด ํ•ญ์ƒ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹นํ•ด์ œ๋ฅผ ํ•ด๋„ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. unowned๋Š” ๊ฐ’์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  unowned ์ฐธ์กฐ๋Š” ํ• ๋‹นํ•ด์ œ๊ฐ€ ๋œ ์ƒํƒœ์ผ ๋•Œ nil๋กœ ์„ค์ •๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (์ฆ‰, ๊ฐ์ฒด๊ฐ€ ARC์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์–ด๋„ ๊ฐ’์ด ์žˆ๋‹ค๊ณ  ์ธ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ํ• ๋‹นํ•ด์ œ๋œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ fatal error๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ==> ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์ฃผ์†Œ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์˜ค๋„ˆ๋ผ๋Š” ๊ณณ์—์„  ์—ฌ์ „ํžˆ ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์œ ์ €๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์˜ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ • ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ช…์ด ์งง์•„ ๋จผ์ € ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ weak

  1. weak์˜ ๊ฒฝ์šฐ์— ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์ด nil์ผ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ€ ํ• ๋‹นํ•ด์ œ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์ฐธ์กฐ๋ฅผ nil๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 
  2. weak๋ฅผ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ nil์˜ ์„ค์ • ๋˜์–ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ optional๋กœ ์„ ์–ธ๋จ์œผ๋กœ, unrappingํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ช…์ด ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋” ๊ธด ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

 

โ“๋ฐ›์•˜๋˜ ์งˆ๋ฌธ

์ด์—ˆ๋Š”๋ฐ ํ™•์‹คํ•˜๊ฒŒ ๋Œ€๋‹ต์„ ๋ชป ํ•ด์„œ ์ •๋ฆฌ.

 

* unowned์™€ weak๋Š” ์–ธ์ œ ์‚ฌ์šฉ์ด ๋˜๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉฐ, unowned๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

์ด ์งˆ๋ฌธ์„ ๋ฐ›๊ณ  ๊ฐœ๋…๋งŒ ์ค€๋น„ํ–ˆ๋˜ ํ„ฐ๋ผ ์กฐ๊ธˆ ๋‹นํ™ฉ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‚ฌ์šฉ ์‹œ์ ์˜ ์ฐจ์ด๋Š” ๊ฐ„๋‹จํ–ˆ๋‹ค. ์•ž์„œ ์ •๋ฆฌํ–ˆ๋˜ ์ฐจ์ด์ ์ด ๊ณง unowned์™€ weak ์‚ฌ์šฉ์˜ ์ฐจ์ด์ ์ด์—ˆ๋‹ค. nil๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„  nil์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๋Š” weak๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ฌด์กฐ๊ฑด ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—” unowned๋ฅผ ์“ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ช…์— ๋”ฐ๋ผ ์ƒํ™ฉ์— ๋งž์ถฐ ์“ฐ๋ฉด ๋œ๋‹ค. ์ฆ‰, unowned๋Š” ๊ฐ’์ด ํ•ญ์ƒ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๊ณ , weak๋Š” ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ช…์— ๋Œ€ํ•œ ๋ถˆํ™•์‹ค์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

์Šคํ„ฐ๋””์—์„œ unowned๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„œ๋กœ ์˜๊ฒฌ์„ ์กฐ๊ธˆ ๋‚˜๋ˆ„์—ˆ์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์•ˆ์ •์„ฑ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ธ swift ๊ธฐ๋ฐ˜์—์„œ์˜ ์‹œ์Šคํ…œ์ด๋ผ nil์˜ ์—ฌ๋ถ€๊ฐ€ ๊ทธ ์ด์œ ๋กœ ๊ฐ€์žฅ ์ปธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ํ˜น์—ฌ๋ผ๋„ nil์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ, ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด unowned๋ณด๋‹ค nil์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๋Š” weak๊ฐ€ ๋” ์ž์ฃผ ์‚ฌ์šฉ๋˜์–ด ์™”๋˜ ๊ฒƒ. 

 

(+)

 

Use an unowned reference only when you are sure that the reference always refers to an instance that hasn’t been deallocated. If you try to access the value of an unowned reference after that instance has been deallocated, you’ll get a runtime error.

nil ์œ ๋ฌด์— ๋Œ€ํ•ด์„œ ๊ณต์‹๋ฌธ์„œ์—๋„ ํŠน๋ณ„ํžˆ ์ฃผ์˜๋ฅผ ์ฃผ๊ณ  ์žˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ์—†์ด unowned๋ฅผ ์‚ฌ์šฉํ• ๋ ค๋ฉด ํ• ๋‹นํ•ด์ œ๊ฐ€ ๋˜์ง€์•Š์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๊ณ .

 

 

 

 

 


 

๋ณด๊ฐ• ๋ถ€๋ถ„

 

 

 

๐Ÿ“– ARC

๋ณธ๊ฒฉ ARC๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์ „, ARC์˜ ์ง๊ถ(?) deinit ์ด์•ผ๊ธฐ๋ฅผ ์•ˆ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

deinit{
        print("deinit", self)
    }

 

deinit์ด๋ž€?

 

- ํŽ˜์ด์ง€๊ฐ€ ๊ณ„์† ์Œ“์ด๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ.
- ํ™”๋ฉด์ด ๋–ด๋‹ค๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๊ณ  ์‚ฌ์šฉ์ž ๋ˆˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ์ƒˆ๋กœ์šด ํ™”๋ฉด์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์‚ฌ๋ผ์ง€๊ฒŒ ํ•จ.

 

์ •๋„๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋– ๋Œ๊ณ  ์žˆ์ง€ ์•Š๋Š”์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ™”๋ฉด์ƒ์—์„  ์‚ฌ๋ผ์กŒ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ์—์„  ์ œ๋Œ€๋กœ ํ•ด์ œ๋˜์ง€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด......... ๊ณค๋ž€ํ•ด์ง€๋Š”๋ฐ, ๊ทธ๊ฑธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹จ ๋œป!

 

 

ARC ๋“ฑ์žฅ ์ด์ „์—” MRC๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ˆ˜๋™์ด๋ผ๋Š” ํŠน์ง•์ด์žˆ๋‹ค. ์‚ฌ์‹ค ์ˆ˜์—… ๋•Œ ์ด๋Ÿฐ ๊ฒŒ ์žˆ๋‹ค~ ์‹์œผ๋กœ ์ ‘ํ•˜๋ฉฐ ARC์™€์˜ ์ฐจ์ด์ ์— ์ค‘์ ์„ ๋‘๊ณ  ๋ฐฐ์›Œ์„œ ARC ๊ณต๋ถ€ํ•˜๋Š” ๊น€์— ์กฐ๊ธˆ ๋” ์ฐพ์•„๋ณด์•˜๋‹ค.

 

 

 

MRC

Manual Reference Counting

 

- ๋ฌด๋ ค object-c ๋•Œ ์‚ฌ์šฉ ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฒ•.

- ์ด๋ฆ„์—์„œ ๋‚˜ํƒ€๋‚˜์žˆ๋“ฏ์ด ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋•Œ, retain (๊ฐ์ฒด์˜ ์ฆ๊ฐ€), relese (๊ฐ์ฒด์˜ ๊ฐ์†Œ) ๋“ฑ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.

- ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š”๋ฐ, ํ•˜๋‚˜์”ฉ ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ์•ฑ์ด ์กฐ๊ธˆ ํž˜๋“ค์–ดํ•  ์ˆ˜ ์žˆ๋‹จ ๋‹จ์ ์ด ์žˆ๋‹ค.

 

 

์ฐธ๊ณ ๋กœ, Refrence Counting (์ดํ•˜ RC)๋Š” ์• ํ”Œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ• ๋•Œ ์นด์šดํŒ…์„ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฐธ์กฐํ•  ๋•Œ ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์‚ฌ์šฉ์„ ๋‹คํ•˜๋ฉด ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŠธ๋ฅผ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. RC๊ฐ€ 0์ธ ๊ฒฝ์šฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ณ  ์žˆ์„ ๋•Œ์ด์ž, ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์œ ์ง€ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ด๊ธฐ๋„ ํ•˜๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜๋˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” WWDC 11์— ARC๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉฐ ๋‹ฌ๋ผ์กŒ๋Š”๋ฐ ....... 

 

 

 

 

ARC

Automatic Reference Counting

 

Swift uses Automatic Reference Counting (ARC) to track and manage your app’s memory usage. In most cases, this means that memory management “just works” in Swift, and you don’t need to think about memory management yourself. ARC automatically frees up the memory used by class instances when those instances are no longer needed.

 

์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋ผ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค. ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด, ARC๋Š” ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ถ”์  ๋ฐ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ swift ํ™˜๊ฒฝ์ผ ์‹œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค์€ ํฌ๊ฒŒ ์—ผ๋‘ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ. 

 

๊ทธ๋Ÿฐ๋ฐ ๋ณธ๋ฌธ ์† ARC ์ž๋ž‘์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•˜๊ธฐ ์ „ ๋‚ด ๋ˆˆ์— ๋“ค์–ด์˜จ

 

 

"In most cases"

"In most cases"

"In most cases"

"In most cases"

 

 

์ฆ‰ ์˜ˆ์™ธ์˜ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ........

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„์•ผ ํ–ˆ๋˜ ๊ฒŒ unowned์™€ weak ์˜€๋‹ค. ๋ณดํ†ต์˜ ๊ฒฝ์šฐ swift๊ฐ€ ์•Œ์•„์„œ ARC๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฒ ์ง€๋งŒ, ๊ฐ•ํ•œ ์ˆœํ•œ์ฐธ์กฐ์˜ ์ƒํ™ฉ์—์„  ARC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•ด์ค„ ์ˆ˜๊ฐ€ ์—†์–ด์„œ memory leak... ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฝ์šฐ์—” ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ๊ทธ ์—ญํ• ์„ unowned์™€ weak๊ฐ€ ์ฒ˜๋ฆฌ ํ•ด์ฃผ๊ณ  ์žˆ๋˜ ๊ฒƒ. 

 

 

 

 

 

 

 

 

 

๐Ÿ“Refereances

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐ŸŽ Dev > Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] Keychain vs UserDefaults  (0) 2023.12.17
[Swift] Method Dispatch  (0) 2023.12.02
'๐ŸŽ Dev/Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Swift] Keychain vs UserDefaults
  • [Swift] Method Dispatch
Callie_
Callie_
  • Callie_
    CalliOS
    Callie_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐ŸŽ APPLE
      • ๐ŸŽ Dev
        • Swift
        • UIKit
        • SwiftUI
        • Issue
        • ๊ตฌํ˜„
      • ๐ŸŽ Design
        • HIG
      • โš™๏ธ CS
      • ๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
        • ๋ฐฑ์ค€
      • ๐ŸŸ๏ธ ์ง๊ด€๋กœ๊ทธ (์ถœ์‹œ์•ฑ)
        • ์—…๋ฐ์ดํŠธ
      • ๐ŸŒฑ SeSAC iOS 3๊ธฐ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ios
    CustomView
    layer.shadow
    DidEndOnExit
    Enum
    .OverFullScreen
    IBAction
    DiffableDataSource
    clipsToBound
    ์ƒ๋ช…์ฃผ๊ธฐ
    apply
    assets
    ๋„คํŠธ์›Œํฌํ†ต์‹ 
    SeSAC
    .fullScreen
    IBOutlet
    TapGestureRecognizer
    Infoํƒญ
    SwiftUI
    stroyboard
    Snapshot
    CocoaTouchFramework
    ํ™”๋ฉด์ „ํ™˜
    Entry Point
    TableViewCell
    modalPresentStyle
    Swift
    diffable
    addTarget
    cornerradius
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Callie_
[Swift] unowned vs weak
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”