๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/iOS

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] Retain Cycle์ด๋ž€?(2) - Strong,Weak,Unowned

by Fomagran ๐Ÿ’ป 2020. 12. 4.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ €๋ฒˆ์— ์•Œ์•„๋ณด์•˜๋˜ Retain Cycle ์„ ๋” ๊นŠ์ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

ํ˜น์‹œ Retain Cycle ์˜ ๊ธฐ์ดˆ๋ฅผ ์•Œ๊ณ ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ ์—ฌ๊ธฐ ๋จผ์ € ๋ด์ฃผ์„ธ์š”~

 

๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~

 

Strong


์ด๋ฆ„์ฒ˜๋Ÿผ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์•ž์— weak์ด๋‚˜ unowned๋ฅผ ์“ฐ์ง€ ์•Š์•˜์„ ๋• ๊ธฐ๋ณธ์ ์œผ๋กœ strongํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ class A๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜ var a:A? ๊ฐ€ ์žˆ์„ ๋• strong var a:A? ์ธ๋ฐ strong์ด default์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต๋œ ๊ฒƒ์ด์ฃ .

 

Weak


์ด๋ฆ„์ฒ˜๋Ÿผ ์•ฝํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ๋œป์ด์—์š”.

 

์ œ ์ƒ๊ฐ์—” ๋ฆฌํ…Œ์ธ ์‚ฌ์ดํด ์ค‘์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”.

 

์ €๋ฒˆ ์‹œ๊ฐ„์— ์•Œ์•„๋ณด์•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜์ž๊ณ  ํ–ˆ๋Š”๋ฐ 

 

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•ฝํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

์ €๋ฒˆ ์‹œ๊ฐ„์— ์ŠคํŠธ๋กฑ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์•„๋ž˜ ๋‘ ํ”„๋กœํผํ‹ฐ์˜ ์—ฐ๊ฒฐ์€ ํ•ด์ œ์‹œํ‚ฌ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€

 

๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”. 

 

weak์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•ด๋„ reference count๊ฐ’์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์•„์š”.

 

๋˜ํ•œ ์ฐธ์กฐ๋œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ nil๊ฐ’์ด ๋œ๋‹ค๋ฉด ์ž๋™์œผ๋กœ nil์ด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ถŒํ•œ์ด ์ฐธ์กฐ๋œ ์ธ์Šคํ„ด์Šค์—๊ฒŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ nil์ด ๋  ์ค€๋น„

 

๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ด์š”. ๊ณ ๋กœ ๋ฐ˜๋“œ์‹œ ์˜ต์…”๋„๋กœ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์ฃ !

 

์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด a์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ ์ค‘ ํ•˜๋‚˜์ธ some์„ weak์œผ๋กœ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ๋‘ ํ”„๋กœํผํ‹ฐ ๊ฐ„ ์—ฐ๊ฒฐ์€ a๋‚˜ b์˜ ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๋ผ๋„

 

nil๊ฐ’์ด ๋˜๋ฉด ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

Unowned


์ด๋ฆ„์€ ๋ฏธ์†Œ์œ ๋ผ๋Š” ๋œป์ด์—์š”.

 

์ด๊ฒƒ๋„ weak์™€ ๊ฑฐ์˜ ๋˜‘๊ฐ™์•„์š”. ์•ฝํ•˜๊ฒŒ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

weak์™€ ๋‹ค๋ฅธ ์ ์€ unowned๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ ˆ๋Œ€๋กœ nil์ด ๋  ์ˆ˜๊ฐ€ ์—†์–ด์š”.

 

๋งŒ์•ฝ nil๋กœ ๋œ๋‹ค๋ฉด runtime error๋ฅผ ์ผ์œผํ‚ค๊ฒŒ ๋˜์ฃ .

 

๊ณ ๋กœ ์ด ๊ฐ์ฒด๋Š” ์ ˆ๋Œ€๋กœ nil๊ฐ’์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํ™•์‹ ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์˜ต์…”๋„๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค!

 

ํ•˜์ง€๋งŒ ๋Œ€์ฒด์ ์œผ๋กœ๋Š” weak์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

"๊ทธ๋ ‡๋‹ค๋ฉด ์™œ unowned๊ฐ€ ํ•„์š”ํ•ด?"

 

Head๋ผ๋Š” ํด๋ž˜์Šค์™€ Person์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

 

๋จธ๋ฆฌ ํด๋ž˜์Šค์—๋Š” ๋ˆ„๊ตฌ์˜ ๋จธ๋ฆฌ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์‚ฌ๋žŒ ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์•ˆ์Šคํ„ด์Šค๊ฐ€ ์žˆ๊ณ  ์‚ฌ๋žŒ ํด๋ž˜์Šค์—๋Š” ๋จธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค

 

๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ์‚ฌ๋žŒ์ด ์—†๋‹ค๋ฉด ๋จธ๋ฆฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๊ณ  ๋˜ํ•œ ์‚ฌ๋žŒ์€ ๋จธ๋ฆฌ๊ฐ€ ์—†๋Š” ์‚ฌ๋žŒ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” ์‚ฌ๋žŒ

 

์ธ์Šคํ„ด์Šค๋Š” ์ ˆ๋Œ€๋กœ nil๊ฐ’์ด ๋˜๋ฉด ์•ˆ๋˜๊ณ  ์‚ฌ๋žŒํด๋ž˜์Šค ์•ˆ์— ๋จธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋˜ํ•œ ์ ˆ๋Œ€๋กœ nil๊ฐ’์ด ๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์ฃ !

 

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„  strong์œผ๋กœ ์„ ์–ธ๋˜์„œ๋„ ์•ˆ๋˜๊ณ  ๊ทธ๋ ‡๋‹ค๊ณ  weak์œผ๋กœ ์“ฐ์ž๋‹ˆ ์˜ต์…”๋„์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ธฐ 

 

๋•Œ๋ฌธ์— ๊ณ ๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—” ์•„๋ž˜์™€ ๊ฐ™์ด unowned๋ฅผ ์‚ฌ์šฉํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!!

 

1
2
3
4
5
6
7
8
9
10
11
12
class Person {
 
  unowned var head:Head
 
}
 
 
class Head {
 
    unowned var person:Person
 
}

์˜ค๋Š˜์€ Strong,Weak,Unowned์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”.

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์˜ˆ์ œ์ธ delegate์™€ clousure ์—์„œ์˜ ๋ฆฌํ…Œ์ธ ์‚ฌ์ดํด์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์˜ˆ์ œ์™€ ํ•จ๊ป˜

 

์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€