์๋ ํ์ธ์ 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์ ๋ํด์๋ก ๋์์ค๋๋ก ํ๊ฒ ์ต๋๋ค!!
'๐ iOS > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ํ๋ฉด ํ์คํฌ๋ฆฐ์ผ๋ก ๋ง๋๋๋ฒ (0) | 2020.12.01 |
---|---|
[iOS]Cell ํญํ์ ๋ Segue๋ก ๋ฐ์ดํฐ ๋ณด๋ด๋ ๋ฒ (didSelect & Pass Data by Segue) (0) | 2020.11.30 |
[iOS ๋ฉด์ ์ง๋ฌธ] ARC(Auto Reference Counting)๋? (0) | 2020.11.21 |
[iOS ๋ฉด์ ์ง๋ฌธ] Delegate์ Protocol (0) | 2020.11.16 |
[iOS] Swift๋ก Apple๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (2) | 2020.11.15 |
๋๊ธ