์๋ ํ์ธ์ Foma ์ ๋๋ค!!
์ด๋ฒ ์๊ฐ์ ์์๋ณผ๊ฑด ๋ฐ๋ก "ARC(Auto Reference Couting)" ๋ผ๋ ๊ฒ์ธ๋ฐ์.
Memory
์ด ARC๊ธฐ๋ฒ์ ๋ฐ๋ก iOS์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ ํต์ฌ์ ๋๋ค.
"์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ๋๋๋ฐ?"
๋ง์ฝ ์ธ๋ชจ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด ์ฑ์ด ๋๋ ค์ง๊ณ ์ ์ ๋์ ์ด๊ณผํ๋ฉด ๊ฒฐ๊ตญ ์ฑ์ด ๊บผ์ ธ๋ฒ๋ฆด ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ ์ ๋ฅผ ์ดํํ๊ฒ ๋ง๋ค์ ์๋ ์น๋ช ์ ์ธ ๊ฒ์ด์ฃ .
"๊ทธ๋ผ ์ธ๋ชจ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์๊ธฐ๋๊ฑด๋ฐ?"
์ธ๋ชจ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ค๋ฅธ ๋ง๋ก ํํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋์ ๊ฐ ์๊ณ ์๋ค๋ ๋ง๋ก๋ ํํ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ ๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ(๋ฉ๋ชจ๋ฆฌ ๋์) ํ์์ด๋ผ๊ณ ํ๋๋ฐ์.
์ด ๋ฉ๋ชจ๋ฆฌ ๋ฆญ ํ์์ ์๋์ผ๋ก ๋ง์์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ARC์ ๋๋ค !
Auto Reference Counting
๋จผ์ ์์ Objective - C ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ์๊น์?
MRC(Menual Reference Couting)๋ก ๊ด๋ฆฌ๋ฅผ ํด์ฃผ์๋ค๊ณ ํด์.
๋ง ๊ทธ๋๋ก ์ฐธ์กฐํ ๊ฐฏ์๋ฅผ ์ธ์ด์ฃผ๋ ๊ฒ์ด์ฃ !
๋ง์ฝ ์ด๋ค ์ธ์คํด๊ฐ ์ด๋ค ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ์๋ค๋ฉด ์ฐธ์กฐ๋นํ ๋ ํผ๋ฐ์ค๋ฅผ ์ฝ๋๋ก retain ์ด๋ผ๊ณ ํด์ฃผ๊ณ ์ฐธ์กฐ๊ฐ์ +1 ํด์ฃผ๊ณ
๊ทธ ๋ ํผ๋ฐ์ค๊ฐ nil๊ฐ์ด ๋๊ฑฐ๋ ์ธ๋ชจ์์ด์ก๋ค๊ณ ์๊ฐํ๋ฉด release ๋ผ๊ณ ์จ์ฃผ๊ณ ์ฐธ์กฐ๊ฐ์ -1์ ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
๋์ถฉ ์๋ ์ค๋ธ์ ํฐ๋ธ ์จ ์์ ๋ฅผ ๋ณด๋ฉด newName์ด๋ผ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ฃผ์์ผ๋ retain์ ํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ name์ newName์ ํ ๋นํ ๊ฒ์ด๋ name์ ํ์์์ด์ง ์์ ์ด๋ฏ๋ก release ํด์ค๋๋ค.
1
2
3
4
5
6
|
- (void)setName:(NSString *)newName {
if (name == newName) return;
//count +1 [newName retain];
//count -1 [name release];
name = newName;
}
|
cs |
ํต์ฌ์ retain์ผ๋ก ์ฐธ์กฐ๊ฐ์ ๋๋ ค์ฃผ๊ณ release๋ก ์ฐธ์กฐ๊ฐ์ ๊ฐ์์์ผ์ค๋ค๋ ๊ฒ์ ๋๋ค!(์ ๋ ์ค๋ธ์ ํฐ๋ธ ์จ๋ ์ ๋ชฐ๋ผ์ ใ )
๊ทธ๋ฆฌ๊ณ retain๊ณผ release์ ์ง ๊ฐฏ์๋ฅผ ๋น๊ตํด ์ ๋ง์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ค๋ ๊ฒ์ผ๋ก ํ๋จํ๊ฑฐ์ฃ !
์ ์ด์ ๊ทธ๋ผ ์ง์ง ARC๋ฅผ ์์๋ณด์๊ตฌ์!!
ARC์ ์๋ฆฌ๋ ๋ง ๊ทธ๋๋ก ์๋์ผ๋ก MRC๊ฐ ํ๋ ๋ ํผ๋ฐ์ค ์นด์ดํ ์์ ์ ์์์ ํด์ค๋ค๋ ๊ฒ์ธ๋ฐ์.
์๋ฆฌ๋ ์ธ์คํด์ค๊ฐ ์ด๋ค ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ์ ๋ retain์ ํด์ค count๋ฅผ +1 ํด์ฃผ๊ณ ์ธ๋ชจ์๋ค๊ณ ๋๊ปด์ก์ ๋(nil๊ฐ์ด ๋๊ฑฐ๋ ํจ์๊ฐ ์ข ๋ฃ๋๊ฑฐ๋...)
release๋ฅผ ํด์ค count๋ฅผ -1 ํด์ค๋ค๋ ๊ฒ์ด์ฃ .
์ด๊ฒ์ ์ปดํ์ผ์ ์์์ ๋ฃ์ด์ค Reference Count๋ฅผ ์ผ๋ค๋ ๊ฒ์ด์ฃ
๊ทธ๋ฌ๋๊น "๊ฐ๋ฐ์ ๋๋ค๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๊ฒฝ์ฐ์ง๋ง!! ๋ด๊ฐ ์์์ ์ฐธ์กฐ ์นด์ดํ ํด์คํ ๋๊น!!" ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด์ฃ .
"๊ทธ๋ผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌํ๋๋ฒ ๋ชฐ๋ผ๋ ๋์ง ์๋?"
ARC๋ ์ฐธ ๊ณ ๋ง์ด ๋ ์์ด์ง๋ง ์ ๋ง ์๋ฆฌ ๊ทธ๋๋ก ๋ ํผ๋ฐ์ค๊ฐ ์ฐธ์กฐ๋นํ ๋ +1 ๊ทธ ์ธ์คํด์ค๊ฐ ์ธ๋ชจ์์ด์ก์ ๋๋ง ํ๋จํด์ -1์
ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์ด ์์๋ ๋ค์ ํฌ์คํธ์ธ Retain Cycle์ด๋? ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
ARC์ ๋ํด์ ๋ ์์ธํ ์๊ณ ์ถ์ ๋ถ๋ค์ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์!!
'๐ iOS > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS]Cell ํญํ์ ๋ Segue๋ก ๋ฐ์ดํฐ ๋ณด๋ด๋ ๋ฒ (didSelect & Pass Data by Segue) (0) | 2020.11.30 |
---|---|
[iOS ๋ฉด์ ์ง๋ฌธ] Retain Cycle์ด๋?(1) - ๊ฐ๋ (4) | 2020.11.30 |
[iOS ๋ฉด์ ์ง๋ฌธ] Delegate์ Protocol (0) | 2020.11.16 |
[iOS] Swift๋ก Apple๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (2) | 2020.11.15 |
[iOS ๋ฉด์ ์ง๋ฌธ]์ค์ ๋๋ฐ์ด์ค๊ฐ ์์ ๊ฒฝ์ฐ ํ ์ ์๋ ๊ฒ๊ณผ ์๋ ๊ฒ (3) | 2020.11.13 |
๋๊ธ