JerryiOS 2023. 5. 18. 19:15

Q. ๋ฉ”๋ชจ๋ฆฌ ๋ฆญ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

A.

๋ฉ”๋ชจ๋ฆฌ ๋ฆญ(๋ˆ„์ˆ˜)๋ž€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค.

 

Q. ์ˆœํ™˜ ์ฐธ์กฐ(Reference Cycle)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

A.

1. ๋‘ ๊ฐ€์ง€ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ์— ๋Œ€ํ•œ ๊ฐ•ํ•œ์ฐธ์กฐ ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ๋•Œ ์ˆœํ™˜ ์ฐธ์กฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

2. ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝํ•œ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ํ•ด์†Œ์‹œ์ผœ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Q. Retain Count ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

A.

1. ARC์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฐฉ์‹์„ Retain Count ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฉ”๋ชจ๋ฆฌ์—์„œ reference count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์„ retain, ๊ฐ์†Œ์‹œํ‚ค๋Š” ๊ฒƒ์„ release๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

Q. weak๊ณผ unowned๋ฅผ ๋น„๊ต ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

A.

1.
weak๋Š” ์ฐธ์กฐ๋Œ€์ƒ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์—ˆ์„ ๋•Œ nil์ด ์„ค์ •๋˜๋Š” optional์ด์ง€๋งŒ,
unowned๋Š” ์ฐธ์กฐ๋Œ€์ƒ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์—ˆ์„ ๋•Œ nil์ด ๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

2.
weak์€ sidetable์„ ๊ฑฐ์ณ์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€๋งŒ
unowned๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

3.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— unownedํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, strong reference count๊ฐ€ 0์ด ๋˜๋ฒ„๋ฆฌ๋ฉด dangling pointer๊ฐ€ ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค ํ•ด์ œ์‹œ์ ์„ ์˜ˆ๋ฏผํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. 
weak๋Š” weak reference๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , unowned๋Š” unowned reference๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

 

Q. side table์ด ๋ฌด์—‡์ด๊ณ , reference count ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

A.

1.
side table์€ Heap Object์—์„œ weak rc๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ์ƒ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
weak ์ฐธ์กฐ๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ์ž๋™์œผ๋กœ side table์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

2.
side table์€ Swift4 ์ด์ „์˜ ์ข€๋น„ ์˜ค๋ธŒ์ ํŠธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3.
reference count์—๋Š” strong, unowned, weak๋กœ 3๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
HeapObject, struct ๋‚ด๋ถ€์—์„œ๋Š” ์ด 3๊ฐ€์ง€์— ๋Œ€ํ•œ rc๋“ค์„ ๋ชจ๋‘ countingํ•ฉ๋‹ˆ๋‹ค.

4.
strong rc๊ฐ€ 0์ด๋˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ deinit ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ dealloc๋œ ์ƒํƒœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

5.
unowned rc๊ฐ€ 0์ด๋˜๋ฉด dealloc ์ƒํƒœ๊ฐ€ ๋˜์–ด ์™„์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

6.
dealloc์ด ๋˜์—ˆ์–ด๋„ weak rc๊ฐ€ 0์ด๋ผ๋ฉด side table์ด ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ freed ์ƒํƒœ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

7. 
weak rc์ด 0์ด๋˜๋ฉด ๋น„๋กœ์†Œ ๊ฐ์ฒด๋Š” ์™„์ „ํžˆ ์ฃฝ์–ด DEAD ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

Q. ์ข€๋น„ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

1.
์ข€๋น„ ์˜ค๋ธŒ์ ํŠธ๋Š” strong rc๊ฐ€ 0์ด์ง€๋งŒ weak rc๊ฐ€ 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์™„์ „ํ•œ ํ•ด์ œ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

2.
๋Ÿฐํƒ€์ž„์— weak reference๋ฅผ ํ†ตํ•ด์„œ ์ข€๋น„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•ด์ œ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

 

Q. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™๊ณผ ์Šคํƒ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

1.
๋ฉ”๋ชจ๋ฆฌ์—์„œ ํž™๊ณผ ์Šคํƒ์€ ๊ฐ์ž ์—ญํ• ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
ํž™ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ณต๊ฐ„์ด๊ณ ,
์Šคํƒ ์˜์—ญ์€ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ์ง€์—ญ๋ณ€์ˆ˜ ๋“ฑ ์‹คํ–‰ ์ค‘์ด ์•„๋‹Œ ์ •์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

2.
ํž™ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผํ•˜๊ณ ,
์Šคํƒ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ๋Š” append์™€ pop์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

3.
์ƒํ™ฉ๋ณ„๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ญํ• ๊ณผ ์ข…๋ฅ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—
ํž™ ์˜์—ญ๊ณผ ์Šคํƒ์˜์—ญ์„ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•จ์œผ๋กœ์จ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 


Ref

https://velog.io/@heyksw/iOS-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84-ksl8uxwf

๋ฐ˜์‘ํ˜•