-
Strong Reference - MemoryiOS/๐ Swift 2020. 12. 31. 12:04
"๊ฐํ ์ฐธ์กฐ"
์ฐธ์กฐ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ณ๋์ ํค์๋ ์์ด ์ ์ฅํ ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐํ ์ฐธ์กฐ๊ฐ ์๊น๋๋ค.
Swift์ ์ฐธ์กฐ ํ์ : Class, Closure
๊ฐํ ์ฐธ์กฐ๋ฅผ ํตํด ์ ์ฅ๋ ์ธ์คํด์ค๋ ๋ณ์ ํน์ ์์๊ฐ 1. ์์ ํ๊ณ , 2. ์ฐธ์กฐํฉ๋๋ค.
ARC์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ๋จ ๊ธฐ์ค
ARC๋ ์์ ( retain )๋ฅผ ๊ธฐ์ค์ผ๋ก Reference Counting์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์์ ๊ฐ 1 ์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํ์ง ์๊ณ , ์์ ๊ฐ 0์ด ๋ ๋ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ๊ฐ 0 ์ด๊ณ ์ฐธ์กฐ๊ฐ 1์ธ ์ํฉ์ด ์์๊น์? ํ์ ํ weak์ unowned๋ฅผ ํตํด ๊ตฌํํ ์ ์์ต๋๋ค.
Reference Count ๋ฅผ ๊ฐ์์ํค๋ ๋ฐฉ๋ฒ์, ์ฐธ์กฐํ๋ ๋ณ์์ nil์ ํ ๋นํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ํด์ ์ํค๋ ค๋ฉด Optional Type ์ผ๋ก ์ ์ธํด์ฃผ์ด์ผ ํฉ๋๋ค.
class Person { var name = "John Doe" var car: Car? deinit { print("person deinit") } } var person: Person? = Person() // ๊ฐํ ์ฐธ์กฐ ๋ฐ์, count = 1 person = nil // count = 0 // ARC ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ํด์ , deinit() ํธ์ถ๋จ // "person deinit"
๋.
๋ค์ ๊ธ: Strong Reference Cycle - Memory
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Weak Reference - Memory (0) 2021.01.02 [Swift] self ๋ ์ด๋ ์์ ๋ถํฐ ์ฌ์ฉํ ์ ์์๊น? (2) 2021.01.01 ARC - Memory (0) 2020.12.30 [Swift] ๊ฐํ์ ๊ณผ ์ฐธ์กฐํ์ ( Value Type vs Reference Type ) (4) 2020.12.29 Mutability of Collections - Collections (0) 2020.12.01