π» ππ πππππ
μΈμ€ν΄μ€κ° κ³μν΄μ λ©λͺ¨λ¦¬μ λ¨μμμ΄μΌ νλ λͺ
λΆμ λ§λ€μ΄ μ£Όλ κ²μ΄ λ°λ‘ κ°νμ°Έμ‘°μ΄λ€.
μΈμ€ν΄μ€λ μ°Έμ‘° νμκ° 0μ΄ λλ μκ° λ©λͺ¨λ¦¬μμ ν΄μ λλλ°, μΈμ€ν΄μ€λ₯Ό λ€λ₯Έ μΈμ€ν΄μ€μ νλ‘νΌν°λ λ³μ, μμ λ±μ ν λΉν λ κ°νμ°Έμ‘°λ₯Ό μ¬μ©νλ©΄ μ°Έμ‘° νμκ° 1μ¦κ°νκ² λλ€.
λ, κ°νμ°Έμ‘°λ₯Ό μ¬μ©νλ νλ‘νΌν°, λ³μ, μμ λ±μ nilμ ν λΉν΄μ£Όλ©΄ μλ μμ μκ² ν λΉλμ΄ μλ μΈμ€ν΄μ€μ μ°Έμ‘°νμκ° 1 κ°μνλ€.
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 = Person(name: "yoojin")
//yoojin is being initialized
//μΈμ€ν΄μ€μ μ°Έμ‘° νμ: 1
reference2 = reference1 // μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 2
reference2 = reference1 // μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 1
reference2 = reference1 // μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 0
//yoojin is being deinitialized
μ½νμ°Έμ‘°λ κ°νμ°Έμ‘°μ λ¬λ¦¬ μμ μ΄ μ°Έμ‘°νλ μΈμ€ν΄μ€μ μ°Έμ‘° νμλ₯Ό μ¦κ°μν€μ§ μλλ€.
μ°Έμ΄ νμ
μ νλ‘νΌν°λ λ³μμ μ μΈ μμ weak ν€μλλ₯Ό μ¨μ£Όλ©΄ κ·Έ νλ‘νΌν°λ λ³μλ μμ μ΄ μ°Έμ‘°νλ μΈμ€ν΄μ€λ₯Ό μ½νμ°Έμ‘°νλ€.
class Room {
let number: String
init(number: String) {
self.number = number
}
weak var host: Person?
deinit {
print("Room \(number) is being deinitialized")
}
}
var yoojin: Person? = Person(name: "yoojin")
var room: Room? = Room(number: "25")
room?.host = yoojin // Person μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 1
yoojin?.room = room // Room μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 2
yoojin = nil // Person μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 0, Room μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 1
//yoojin is being deinitialized
print(room?.host) //nil
room = nil // Room μΈμ€ν΄μ€μ μ°Έμ‘° νμ : 0
// Room 25 is being deinitialized
μ°Έκ³ μμ : SWIFTνλ‘κ·Έλλ°5 μΌκ³°