Strong Reference Cycle - Memory
"κ°ν μ°Έμ‘° μν"
ARCμ μλ λ° κ°ν μ°Έμ‘°μ κ·μΉμ μ λͺ¨λ₯΄κ³ μ¬μ©ν λ λ°μνλ μ΄μμ λλ€.
ARCμ κ΄λ ¨λμμΌλ―λ‘ μ°Έμ‘° νμ μ¬μ΄μμ λ°μν©λλ€. (class, closure)
λ°μ μμ
κ°λ°μκ° μΈμ€ν΄μ€μ nilμ ν λΉνλ κ²½μ°λ μΈμ μΌκΉμ?
μΈμ€ν΄μ€κ° λ μ΄μ μ°Έμ‘°ν νμκ° μμ΄μ λ©λͺ¨λ¦¬μμ ν΄μ μν€κ³ μΆμ κ²½μ°μΌ κ²μ λλ€.
μλλ μΈμ€ν΄μ€μ λ©λͺ¨λ¦¬ ν΄μ μμ§λ§, μΈμ€ν΄μ€κ° ν΄μ λμ§ μκ³ λ©λͺ¨λ¦¬μ λ¨μμμκ³Ό λμμ μ κ·Όλ ν μ μλ κ²½μ°κ° μκΉλλ€.
λ°λ‘ κ°ν μ°Έμ‘° μνμ΄ λ°μν κ²½μ°μ λλ€.
νμ
μΈμ€ν΄μ€μ μΈμ€ν΄μ€ μ¬μ΄(μ΄λ² κΈ), μΈμ€ν΄μ€μ κ·Έ μΈμ€ν΄μ€μ μμ±μ μ μ₯λ ν΄λ‘μ μ¬μ΄
μ½λ
μΈμ€ν΄μ€κ° μλ‘ κ°ν μ°Έμ‘° νλ κ²½μ°, μΈμ€ν΄μ€μ nilμ λ£μ΄λ μΈμ€ν΄μ€μ μμ±μ΄ λ€λ₯Έ μΈμ€ν΄μ€λ₯Ό μΊ‘μ²νκ³ μκΈ° λλ¬Έμ
μ°Έμ‘° νμ (Reference Counting)μ΄ 0μ΄ λμ§ μμμ μ κ·Ό νμ§ λͺ»νμ§λ§ λ©λͺ¨λ¦¬μ λ¨μμλ κ²½μ°μ λλ€.
μλμ μ½λλ₯Ό μλ‘ λ³΄λ©΄, kim μ room μμ±μ΄ Room μΈμ€ν΄μ€λ₯Ό μΊ‘μ²νκ³ μκ³ , roomμ person μμ±μ΄ vice versaλ‘ μΊ‘μ²νκ³ μμ΅λλ€.
μ΄ν kim κ³Ό room μλ nilμ ν λΉνμ¬ μ°Έμ‘° νμλ₯Ό κ°μμμΌ°μ§λ§, μ μ κ·Έ μΈμ€ν΄μ€λ€μ μμ±μ΄ μΊ‘μ²νκ³ μκΈ° λ
λ¬Έμ μ°Έμ‘° νμλ 1μ΄κ³ , ARCμ μν΄ λ©λͺ¨λ¦¬μμ ν΄μ λμ§ μμμ΅λλ€.
class Person {
...
var room: Room?
...
}
class Room {
...
var person: Person?
...
deinit {
print("deinit")
}
}
var kim: Person? = Person() // Person Instance (μ΄ν P.I) μ°Έμ‘° νμ : 1
var room: Room? = Room() // Room Instance (μ΄ν R.I) μ°Έμ‘° νμ : 1
room?.person = kim // P.I μ°Έμ‘° νμ : 2
kim?.room = room // R.I μ°Έμ‘° νμ : 2
kim = nil // P.I μ°Έμ‘° νμ : 1
room = nil // R.I μ°Έμ‘° νμ : 1
// μ΄ ν kim, room μΈμ€ν΄μ€μ μ κ·Όν μ μμ§λ§, ARCμμν΄ λ©λͺ¨λ¦¬μ λ¨μμκ² λ¨
λ.
λ€μ κΈ: Weak Reference - Memory
Weak Reference - Memory
" μ½ν μ°Έμ‘° " κ°ν μ°Έμ‘° μ¬μ΄ν΄μ ν΄κ²°νκΈ° μν λ°©λ² μ€ νλ μ λλ€. μ°Έμ‘° νμ μ λ³μμ μ μΈ μμ 'weak' ν€μλλ₯Ό μ¨μ£Όμ΄μ ꡬνν©λλ€. κ°ν μ°Έμ‘°μ λ¬λ¦¬ μ½ν μ°Έμ‘°λ μΈμ€ν΄μ€λ₯Ό μμ ( retai
woozzang.tistory.com