swift์์ ์ฐธ์กฐ ํ์๋ฅผ ์ธ๋ ARC๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
์ฐธ์กฐ ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฒ์
์ธ์คํด์ค๋ฅผ ์์ฑ or ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ ๋ +1
์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๊ฐ ํด์ ๋ ๋ or nil์ด ๋ ๋ -1
๊ทธ๋ฆฌ๊ณ 0์ด ๋์์ ๋, ๋ฉ๋ชจ๋ฆฌ์์ ์๋์ผ๋ก ํด์ ๊ฐ ๋๋ค.
์ด๋ก ์ ์ผ๋ก ์ด๋ ๊ณ ,, ์ค์ ๋ก CFGetRetainCount ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ฐธ์กฐ ํ์๋ฅผ ์ธ์ด๋ณด์.
RC +1์ด ๋๋ ๊ฒฝ์ฐ
class EmptyClass {
}
let myClass = EmptyClass() // RC +1
let myClass2 = myClass // RC +1
let myClass3 = myClass // RC +1
print(CFGetRetainCount(myClass)) // 4
print(CFGetRetainCount(myClass2)) // 4
print(CFGetRetainCount(myClass3)) // 4
myClass ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค ๋ -> +1
myClass ๊ฐ์ฒด๊ฐ myClass2 ๋ณ์์ ๋์ -> +1
myClass ๊ฐ์ฒด๊ฐ myClass3 ๋ณ์์ ๋์ -> +1
ํด์ 3์ด ์ฐํ ๊ฒ ๊ฐ์์ผ๋,, 4๊ฐ ์ฐํ๋ค.
(์ฐพ์๋ณด๋ CFGetRetainCount ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ฐธ์กฐ ํ์๊ฐ +1์ด ๋๋ค๊ณ ํ๋ค. ์๋ง ์ฒ์ CFGetRetainCount๊ฐ ํธ์ถ๋ ๋๋ง +1์ด ๋์ด์ ์ธ๊ฒ ๊ฐ๋ค๋ผ๋ ์ถ์ธก,, (์ฐธ๊ณ ))
class EmptyClass {
}
class MyClass {
let class1 = EmptyClass()
let class2 = EmptyClass()
}
let myClass = MyClass() // RC +1
let myClass2 = myClass // RC +1
let myClass3 = myClass // RC +1
print(CFGetRetainCount(myClass.class1)) // 2
print(CFGetRetainCount(myClass2.class2)) // 2
๋ค์ MyClass๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ myClass ๋ด๋ถ์ class1, class2๋ฅผ ์ถ๋ ฅํด ๋ณด์๋ค.
myClass ์์ฒด์ RC๋ 4์ด๊ฒ ์ง๋ง ๋ด๋ถ์ class1, class2 ์ RC๋ ๊ฐ๊ฐ 2๋ฅผ ๊ฐ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
RC -1์ด ๋๋ ๊ฒฝ์ฐ
class MyClass {
let class1 = EmptyClass()
let class2 = EmptyClass()
}
let myClass = MyClass() // RC +1
var myClass2: MyClass? = myClass // RC +1
var myClass3: MyClass? = myClass // RC +1
print(CFGetRetainCount(myClass)) // 4
myClass2 = nil // RC -1
print(CFGetRetainCount(myClass)) // 3
myClass3 = nil // RC -1
print(CFGetRetainCount(myClass)) // 2
nil์ด ๋ ๋์๋ RC๊ฐ -1์ด ๋๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
๊ตฌ์กฐ์ฒด์ RC?
๊ทธ๋ ๋ค๋ฉด ๊ฐ ํ์ ์ธ sturct์ ์ฐธ์กฐ ํ์๋ ์ฐํ๊น?
๊ธฐ๋ณธ์ ์ผ๋ก ARC๋ ์ฐธ์กฐ ํ์ ์ ํํด์๋ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋ค. (๊ฐ ํ์ ์ ๊ฐ์ ๋ณต์ฌํด์ ๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ)
0์ด ๋ฐ๊ฑฐ๋ผ๊ณ ์ถ์ธกํ๋๋ฐ,, ํด๋์ค์ ์ธ์คํด์ค๋ง ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ์์ด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ด๋ค.
ํจ์ ๋งค๊ฐ๋ณ์ ํ์ ์ ๋ณด๋ AnyObject์ด๊ธฐ ๋๋ฌธ์ ํด๋์ค์ ์ธ์คํด์ค๋ง ์ฐธ์กฐ ํ์๋ฅผ ํ์ธํ ์ ์์๋ค.
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋์ผ๋ก ํ๋ก๋น์ ๋ ํ๋กํ์ผ ๊ด๋ฆฌ, extension ์๋ฌ ํด๊ฒฐ (1) | 2024.10.22 |
---|---|
[iOS] ์ฝ๋ ๋ฒ ์ด์ค๋ก ํ๋ก์ ํธ ์ธํ ํ๊ธฐ (0) | 2024.01.21 |
[SwiftUI] Custom TabView ๊ตฌํ (0) | 2023.06.16 |
[iOS] NotificationCenter ๋์ ๋ฐฉ์๊ณผ ํ์ฉ ๋ฐฉ์์ ๋ํด ์ค๋ช ํ์์ค. (0) | 2023.03.31 |
iOS 13 ์ดํ SceneDelegate ๋ฑ์ฅ (0) | 2023.03.14 |