0. ๋ค์ด๊ฐ๋ฉฐ
์ต๊ทผ์ ํ์ต์ ์งํํ๋ฉด์ ๊ฐ์ง๋ ค๋ ํ๋ ์ค ํ๋๊ฐ ์๋ฌธ์ ์ต๋ํ ๊ฐ์ ธ๋ณด๋ ค๊ณ ํ๋ ๊ฒ์
๋๋ค. ์ด์ ์๋ ๊ทธ๋ฅ ๋ฌด์์์ ์ผ๋ก ์์ฑํ๋ ์ฝ๋๊ฐ ๋ง์๊ณ , ์ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์์ฑํด์ผ ํ๋์ง ์๋ฌธ์ ๊ฐ์ ธ๋ณธ ์ ์ด ์๊ฐ๋ณด๋ค ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์กฐ๊ธ์ ๋ ๊ผผ๊ผผํ๊ฒ ๊ทธ๋ฆฌ๊ณ ์ฒ์ฒํ ์ ํํ๊ฒ ํ์ตํด๋๊ฐ๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ณต ์์
์ ์ค์ด๊ธฐ ์ํด์ IBOutlet Collection์ ์ด์ฉํด์ ์ข
์ข
View๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ ํ์๋๋ฐ ์ IBOutlet์ผ๋ก ์ฐ๊ฒฐํ ๋ทฐ์๋ weak ์์์ด๊ฐ ๋ถ์ด ์๊ณ , IBOutlet Collection์ผ๋ก ์ฐ๊ฒฐํ ๋ทฐ์๋ weak ์์์ด๊ฐ ๋ถ์ด ์์ง ์์์ง ์๊ฐํด ๋ณธ ์ ์ด ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฒ์ ์์น ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ์๋ฌธ์ด ๋ค์ด์ ์กฐ์ฌํด๋ณด๋ ค๊ณ ํ์๋๋ฐ, ๋ง์นจ Mission ๊ณผ์ ๋ก ๋์ ์ฆ๊ฒ๊ฒ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค.
1. IBOutlet Collection ์ฐ๊ฒฐ ์ weak ์์์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ์ ๋ํ ๊ณ ๋ฏผ.
์ฐ๋ฆฌ๊ฐ IBOutlet์ Collection ํํ๋ก ์ด์ฉํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๊ฐ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
@IBOutlet var Buttons: [UIButton]!
IBOutlet์ ๋ชจ์์ด๊ธฐ ๋๋ฌธ์ ์ญ์๋ ์์๋ IBOutlet Annotation์ด ๋ถ์ด ์๊ณ , ํ์ ์ UIKit Component์ ๋ฐฐ์ด ํ์ ์ผ๋ก ๋ช ์๋์ด ์๋๋ฐ์. IBOutlet์ ๋จ์ผ๋ก ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ weak๋ฅผ ๋ถ์ผ ์๋ ์๊ณ , ๋ถ์ด์ง ์์ ์๋ ์์ต๋๋ค. ๊ทผ๋ฐ ์ IBOutlet Collection์ผ๋ก ์ฌ์ฉํ ๋๋ weak ์์์ด๋ฅผ ๋ถ์ผ ์ ์๋ ๊ฑธ๊น์?
๊ทธ๋์ ๋ฌด์์ weak๋ฅผ ์์ ๋ถ์ฌ ๋ณด์์ต๋๋ค.
@IBOutlet weak var buttonList: [UIButton]!
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
'weak' may only be applied to class and class-bound protocol types, not '[UIButton]'
weak ์์์ด๋ Reference Count ๊ด๋ฆฌ๋ฅผ ์ํ ์์์ด์ด๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋๋ ํด๋์ค๋ฅผ ๋ฐ๋ฅด๋ ํ๋กํ ์ฝ ์ ์ฉ๋ ์ ์์ต๋๋ค. ์์ ์ฝ๋๋ UIButton์ ๋ฐฐ์ด(Array)๋ก ์ ์ธ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋น์ฐํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ฃ . ์๋ํ๋ฉด ๋ฐฐ์ด(Array)๋ Struct ํ์
์ผ๋ก ๊ตฌํ์ด ๋์ด์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฌธ๋ฒ์ ์ผ๋ก๋ ๋ง์ ๋ณด์ด์ง๋ง, ์ด๋ ๊ฒ ๋จ์ํ ๋ด์ฉ์ผ๊น ๊ถ๊ธํ์ต๋๋ค.
์ด ๊ธ, ์ ๊ธ์ ์ฝ๋ค๊ฐ IBOutlet Collection์ด Top-level Object(์ต์์ ๊ฐ์ฒด)๋ผ๋ ๋ง์ ๋ณด๊ฒ ๋์๋๋ฐ, ์ต์์ ๊ฐ์ฒด๋ strongํ๊ฒ ์ฐธ์กฐ๋์ด์ผ ํ๋ค๋ ๊ฒ์ Apple - Resource Programming Guide ๋ฌธ์์์ ํ์ธํ์ต๋๋ค.
๊ด๋ จ ๋ฌธ์ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Outlets should generally be weak, except for those from Fileโs Owner to top-level objects in a nib file (or, in iOS, a storyboard scene) which should be strong.
์์ง ์ ํํ ๋ต์ ์ฐพ์ง ๋ชปํ์ง๋ง ๋ง์ฝ IBOutlet Collection์ด ์ต์์ ๊ฐ์ฒด๊ฐ ๋ง๋ค๋ฉด, Collection์ผ๋ก์ ํ์ ์์๋ค์ ํ์คํ๊ฒ ์์ ํ๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์(- ์ด์๋ก ํ์ ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ -) ๊ฐํ ์ฐธ์กฐ(Strong Reference)๋ฅผ ์ ์งํ๊ณ ์์ด์ผ ํ๋ ๊ฒ์ด ์๋๊น๋ผ๋ ํฉ๋ฆฌ์ ์ธ ์์ฌ์ ํด๋ณด์์ต๋๋ค.
2. ์์ง ๊ฒฐ๋ก ์ ๋ด๋ฆฌ์ง ๋ชปํ์ต๋๋ค.
1) ๋จ์ํ ๋ฐฐ์ด์ด Struct ํ์
์ด๊ธฐ ๋๋ฌธ์(๋ฌธ๋ฒ์ ์ธ ์ด์ ) weak๋ฅผ ๋ถ์ด์ง ๋ชปํ๋ ๊ฒ์ผ๊น์?
2) ์ต์์ ๊ฐ์ฒด(Top-level Object)๋ก์ ํ์ ์์์ ๋ํ ์์ ๊ถ์ ์ฆ๋ช
ํ๊ณ , ์์์น ๋ชปํ ํ ๋น ํด์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๊ฐํ ์ฐธ์กฐ์ฌ์ผ ํ๋ ๊ฒ์ผ๊น์?
3. ์ ๋ฆฌ
๋ฌธ๋ฒ์ ์ธ ์ด์ ์ ์ง์ค์ ์ข ๋ ํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
weak ์์์ด๋ ๋ ํผ๋ฐ์ค ์นด์ดํธ ์ ๋ฆฌ๋ฅผ ์ํด ์ฐธ์กฐ ํ์
์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด(Struct)ํ์
์ด๊ธฐ ๋๋ฌธ์, weak ์์์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด์ฃ . ํด๋์ค ํ์
์ ์์๊ฐ ๊ตฌ์กฐ์ฒด ์์ผ๋ก ๋ค์ด์ค๊ฒ ๋๋๋ผ๋ ๋ง์ฐฌ๊ฐ์ง์ ์ด์ ๋ก weak ์์์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Image Rendering Mode (Original Image vs Template Image) (0) | 2022.07.12 |
---|---|
Alpha vs Opacity (0) | 2022.07.11 |
๋ฒ๋ค ์์ด๋, Bundle Identifier (2) | 2022.07.10 |
[iOS] UISwitch์ offTintColor ๋ณ๊ฒฝํ๊ธฐ (3) | 2022.07.06 |
[WWDC22] What's new in SF Symbols 4 (2) | 2022.07.06 |