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

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] ARC(Auto Reference Counting)๋ž€?

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

์•ˆ๋…•ํ•˜์„ธ์š” 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์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ์•Œ๊ณ ์‹ถ์€ ๋ถ„๋“ค์€ ์•„๋ž˜ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”!!

 

 

์ž๋™ ์ฐธ์กฐ ์นด์šดํŠธ (Automatic Reference Counting)

 

jusung.gitbook.io

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€