์๋ ํ์ธ์ 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 ์์์ ๋ฆฌํ ์ธ ์ฌ์ดํด์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์์ ์ ํจ๊ป
์ดํด๋ณด๊ฒ ์ต๋๋ค!
๋๊ธ