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

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] Retain Cycle์ด๋ž€?(1) - ๊ฐœ๋…

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

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

 

์˜ค๋Š˜ ์•Œ์•„๋ณผ ๊ฑด ์ง€๋‚œ ์‹œ๊ฐ„ ARC์— ์ด์–ด์„œ Retain Cycle ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ด์š”!

 

ํ˜น์‹œ ARC๋ฅผ ์•„์ง ์ž˜ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์€ ์—ฌ๊ธฐ ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๋จผ์ € ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™์•„์š”!

 

์ž ๊ทธ๋Ÿฌ๋ฉด ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

์šฐ์„  Retain Cycle ์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋–ค ๋ถ€๋ถ„์— ํ•ด๋‹น๋ ๊นŒ์š”?

 

๋ฐ”๋กœ "Heap" ์ด๋ผ๋Š” ์˜์—ญ์ด์—์š”.

 

"Heap" ์ด๋ผ๋Š” ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ €์žฅ๋˜๊ธฐ ์œ„ํ•ด์„  ํ•œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ๋ฐ์š”.

 

๋ฐ”๋กœ ๊ทธ ๊ณต๊ฐ„์„ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

 

์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ง์ด์ฃ .

 

์ž ๊ทธ๋ ‡๋‹ค๋ฉด ๋ณธ๊ฒฉ์ ์œผ๋กœ Retain Cycle์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณผ๊นŒ์š”?

 

๋จผ์ € Retain์€ ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ €๋ ‡๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ์ƒ๊ฒจ๋‚ฉ๋‹ˆ๋‹ค.

 

์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค์™€ ๊ฐ™์ด ์ถ”์ƒํ™”๋œ ๊ฒƒ์œผ๋กœ ๋ถ€ํ„ฐ ๊ฐ์ฒด(Object)๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด์—์š”.

 

A๋ฅผ ํด๋ž˜์Šค๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ " let instance = A()"๋ผ๊ณ  ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ retain๋˜๋Š” ๊ฒƒ์ด๊ฒ ์ฃ .

 

 

 

"๊ทผ๋ฐ ์™œ retain์€ Cycle์ด ํ•„์š”ํ•œ๊ฑฐ์•ผ??"

 

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„์ฃผ ๊ฐ•ํ•˜๊ฒŒ(Strong) ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ์ธ์Šคํ„ด์Šค ์•ˆ์— ์žˆ๋Š” ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ์š”.

 

์˜ˆ์‹œ๋กœ ์„ค๋ช…๋“œ๋ฆฌ๋ฉด ํด๋ž˜์Šค A ์•ˆ์— A type์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜ some์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

class A {

    var some:A?

}

 

๊ทธ๋ฆฌ๊ณ  A๋ฅผ ์ฐธ์กฐํ•˜๋Š” a๋ผ๋Š” ์ธ์Šคํ„ด์Šค์™€ b๋ผ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

var a = A(), var b = A()

 

์ด ๋•Œ a์•ˆ์— some์ด b๊ฐ€ ๋˜๊ณ  b์•ˆ์— a๊ฐ€ some์ด ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

a.some = b , b.some = a

 

๋ฐ”๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ์ธ์Šคํ„ด์Šค๋“ค์ด nil์ด ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๋“ค์ด nil์ด ๋˜๋ฉด์„œ ์•„๋ž˜ ํ”„๋กœํผํ‹ฐ์ธ some๊ณผ some๋งŒ ๋‚จ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ฏธ ์ธ์Šคํ„ด์Šค๋“ค์ด nil์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ ์•„๋ž˜ ํ”„๋กœํผํ‹ฐ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋œ ๊ฒƒ๋“ค์€ ์˜์›ํžˆ ํ•ด์ œ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ์–ด ๋ฒ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์“ธ๋ชจ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(๋ฉ”๋ชจ๋ฆฌ ๋ฆญ) ๋ฅผ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด์ง€์š”!

 

 

์ด๋ ‡๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์ด "์—ฐ๊ฒฐ์ƒํƒœ๋ฅผ Strong,weak,unowned์œผ๋กœ ๊ฐ๊ฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ 

 

์•ฝํ•˜๊ฒŒ ์—ฐ๊ฒฐํ• ์ง€ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜์ง€ ๊ฒฐ์ •ํ•˜์ž!" ๋ผ๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

์ด๊ฒƒ์ด ๋ฐ”๋กœ Retain Cycle ์ž…๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ Retain Cycle์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”. ๋Œ€์ถฉ์ด๋ผ๋„ ์ดํ•ดํ•˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค ใ…œ

 

ํ˜น์‹œ๋ผ๋„ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๊ฑฐ๋‚˜ ์ง€์ ํ•˜์‹ค ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“  ํ™˜์˜์ž…๋‹ˆ๋‹ค !! 

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ํ•˜๊ณ  ๋‹ค์Œ ์‹œ๊ฐ„์— Strong , Weak ,Unowned์— ๋Œ€ํ•ด์„œ๋กœ ๋Œ์•„์˜ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!!

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€