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

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] Delegate๋Š” retain์ด ๋ ๊นŒ?

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

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜ ์•Œ์•„๋ณผ ์ฃผ์ œ๋Š” Delegate๋Š” retain์ด ๋ ๊นŒ? ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ์ฃผ์ œ๋Š” ๋จผ์ € ์ง€๋‚œ ์‹œ๊ฐ„์— ๋‹ค๋ค˜์—ˆ๋˜ Delegate์™€ Protocol ๊ทธ๋ฆฌ๊ณ  Retain Cycle์ด๋ž€? ์„ ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™์•„์š”!

 

๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊ฒŒ์š”~

 

Class-Ony-Protocol


๋จผ์ € Retain์€ ์ €๋ฒˆ ์‹œ๊ฐ„์— ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ์„๋•Œ ์ฆ‰ ์ธ์Šคํ„ดํ™”๋ฅผ ์‹œ์ผœ์ค„๋•Œ ์ƒ๊ธด๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด Delegate๋Š” Protocol์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด๊ณ  Protocol์€ Class๊ฐ€ ์•„๋‹ˆ๋‹ˆ๊น Retain์ด ๋˜์ง€ ์•Š๋Š”๊ฑฐ๊ฒ ์ง€

 

๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํด๋ž˜์Šค์—์„œ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ๋•Œ๋Š” Class - Only - Protocol ์ด๋ผ๋Š” ํด๋ž˜์Šค ์ „์šฉ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค ์ „์šฉ ํ”„๋กœํ† ์ฝœ์ด๋ผ์„œ ํ”„๋กœํ† ์ฝœ์— class๋ฅผ ์ฑ„ํƒํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ์š”.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ”„๋กœํ† ์ฝœ์ด classํƒ€์ž…์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .

 

์ž  ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์ด ๋‚˜์˜จ ๊ฒƒ ๊ฐ™์€๋ฐ์š”.

 

"Delegate๋Š” Class์—์„œ ์ฑ„ํƒํ•˜๋ ค๋ฉด Class Only Protocol ์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•˜๊ณ 

 

์ด๊ฒƒ์€ classํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ Retain์ด ๋œ๋‹ค!! ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

Example: weak delegate


delegateํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์‹ค๋•Œ weak์œผ๋กœ ์„ ์–ธ๋œ ๊ฒƒ์„ ์ž์ฃผ ๋ณด์…จ์„ ๊ฑฐ์—์š”.

 

์œ„์˜ ์„ค๋ช…์„ ๋ณด๋ฉด ์ด์ œ ์™œ delegate๊ฐ€ weak์œผ๋กœ ์„ ์–ธ๋˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์…จ๋‚˜์š”?

 

weak๋กœ ์„ ์–ธํ•ด์ฃผ๋Š” ๊ฒƒ์€ delegate๊ฐ€ retain์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

 

์ดํ•ด๊ฐ€ ์ž˜์•ˆ๋˜์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด์„œ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š”!

 

๋”œ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์„ ์‚ฌ์šฉํ• ๋•Œ์˜ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ SomeViewController์— granVC๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ์–ด๋–ค์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”?

 

FomaViewController์˜ delegate๋Š” GranViewController๋ฅผ ์ฐธ์กฐํ•˜๊ณ  

 

GranViewController์˜ fomaVC๋Š” FomaViewController๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ SomeViewController๋ผ๋Š” ๊ณณ์—์„œ granVC๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋˜๊ฒ ์ฃ .

 

๋งŒ์•ฝ delegate๋ฅผ weak์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด granVC๊ฐ€ nil์ด ๋˜์—ˆ์„ ๋•Œ์˜ ๊ฒฝ์šฐ

 

์•„๋ž˜์™€ ๊ฐ™์ด Strong์œผ๋กœ ์„ ์–ธ๋˜์–ด ๊ฐ์ฒด์˜ ์—ฐ๊ฒฐ์€ ์˜์›ํžˆ ๋‚จ์•„๋ฒ„๋ฆฌ๊ฒŒ ๋˜๊ณ  ๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!!

๊ณ ๋กœ ๋ฐ˜๋“œ์‹œ delegate๋ฅผ weak์œผ๋กœ ์„ ์–ธํ•ด์ฃผ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ Delegate๊ฐ€ retain์ด ๋˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”.

 

ํ˜น์‹œ๋ผ๋„ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๊ฑฐ๋‚˜ ๋” ๊ถ๊ธˆํ•˜์‹  ์  ์žˆ์œผ์‹œ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€