μλ νμΈμ~
μ€λμ ARCμ λν΄μ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
ARCκ° λ©λͺ¨λ¦¬ μμ μ€μμ Heap μμμ κ΄λ¦¬νκΈ° λλ¬Έμ
λ©λͺ¨λ¦¬ μμμ λν΄μ λ¨Όμ μ λ¦¬ν΄ λ³΄κ² μ΅λλ€.
λ©λͺ¨λ¦¬ μμ
νλ‘κ·Έλ¨μ΄ μ€νλ λ, μ»΄ν¨ν°μ λ©λͺ¨λ¦¬λ μ¬λ¬ κ°μ μμμΌλ‘ λλμ΄ μλλ°
μ΄ μ€μμ νλ‘κ·Έλλ°μμ κ°μ₯ μ€μν μμμ stackκ³Ό heapμ λλ€.
Stack
- Stackμ ν¨μ νΈμΆκ³Ό κ΄λ ¨λ μ 보λ₯Ό μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ μμμ λλ€. ν¨μκ° νΈμΆλ λλ§λ€, ν΄λΉ ν¨μμ μ§μ λ³μμ 맀κ°λ³μ, κ·Έλ¦¬κ³ ν¨μμ λ°ν μ£Όμ λ±μ΄ μ€νμ μ μ₯λ©λλ€. ν¨μμ μ€νμ΄ λλλ©΄ ν΄λΉ ν¨μμμ μ¬μ©λ λ©λͺ¨λ¦¬λ μ€νμμ μ κ±°λ©λλ€.
Heap
- Heapμ νλ‘κ·Έλ¨μμ λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬λ₯Ό μ μ₯νκΈ° μν μμμ λλ€. κ°λ°μκ° νμμ λ°λΌ λ©λͺ¨λ¦¬λ₯Ό λμ μΌλ‘ ν λΉνκ±°λ, ν΄μ ν μ μμ΅λλ€. μ΄ μμμ stackκ³Ό λ¬λ¦¬ λ©λͺ¨λ¦¬μ ν¬κΈ°κ° λμ μΌλ‘ λ³ν©λλ€.
ARC (Automatic Reference Counting)λ
ARC (Automatic Reference Counting)λ RCλ₯Ό ν΅ν΄ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν΄ μ£Όλ μμ€ν μ λλ€.
μ¦, ARCλ₯Ό μ¬μ©νλ©΄ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νμ§ μμλ λκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν μ€λ₯λ₯Ό μ€μΌ μ μκ² λ©λλ€.
ARCλ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ³μλ μμκ° μΈμ μ°Έμ‘°λ₯Ό λκ³ , μΈμ λ€μ μ°Έμ‘°νλμ§λ₯Ό μΆμ ν©λλ€.
μ΄λ₯Ό ν΅ν΄ κ°μ²΄μ RCλ₯Ό μ¦κ°μν€κ³ , μ°Έμ‘°κ° λλλ©΄ μ°Έμ‘° κ³μλ₯Ό κ°μμν΅λλ€.
ARCλ₯Ό μ¬μ©νλ©΄μλ κ°ν μν μ°Έμ‘°μ κ°μ λ©λͺ¨λ¦¬ λμ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
μ΄λ₯Ό λ°©μ§νκΈ° μν΄μλ μ½ν μ°Έμ‘° (weak reference)μ λΉμμ μ°Έμ‘° (unowned reference)λ₯Ό μ¬μ©νμ¬ μ°Έμ‘° μνμ μ΅μνν΄μΌ ν©λλ€.
RC (Reference Counting)
RC (Reference Counting)λ κ°μ²΄κ° λ©λͺ¨λ¦¬μμ ν΄μ λ μ μλλ‘ μ°Έμ‘° κ³μλ₯Ό μΆμ νλ μμ€ν μ λλ€. μ°Έμ‘° κ³μλ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ³μλ μμμ μλ₯Ό μλ―Έν©λλ€. κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ³μλ μμκ° μμ λ, κ°μ²΄λ₯Ό μλμΌλ‘ ν΄μ ν©λλ€.
μμ
- μμ μ΄μΌκΈ°ν λ©λͺ¨λ¦¬ λμ λ°©μ§λ₯Ό μν μ½ν μ°Έμ‘°λ₯Ό ν¬ν¨ν μμμ λλ€.
class Person {
var name: String
weak var apartment: Apartment?
init(name: String) {
self.name = name
}
deinit {
print("\(name) deallocated")
}
}
class Apartment {
var number: Int
var tenant: Person?
init(number: Int) {
self.number = number
}
deinit {
print("\(number) deallocated")
}
}
var person1: Person? = Person(name: "κ²½νΈ")
var apartment1: Apartment? = Apartment(number: 123)
person1?.apartment = apartment1
apartment1?.tenant = person1
person1 = nil
apartment1 = nil
// μΆλ ₯ κ²°κ³Ό:
// "κ²½νΈ deallocated"
// "123 deallocated"
μ μ½λλ₯Ό 보면
person1 κ°μ²΄κ° apartment1 κ°μ²΄λ₯Ό μ½ν μ°Έμ‘°λ‘ μ°Έμ‘°νκ³ μλ μνμΈ κ²μ νμΈν μ μμ΅λλ€. (weak var)
μ΄ν, apartment1 κ°μ²΄κ° person1 κ°μ²΄λ₯Ό μ°Έμ‘°νλλ‘ μ€μ νκ³ λμ
person1κ³Ό apartment1μ ν΄μ νλ©΄
Person κ°μ²΄μΈ person1μ ν΄μ ν λ, Apartment κ°μ²΄μΈ apartment1μ μ½ν μ°Έμ‘°λ ν¨κ» ν΄μ κ° λκ² λμ΄ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§ν μ μκ² λλ κ²μ λλ€.
μ€λμ μ¬κΈ°κΉμ§ μ λ¦¬ν΄ λ³΄κ² μ΅λλ€!
κ·ΈλΌ μ΄λ§ ππ»ππ»ππ»
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Closureμ λν΄μ μμ보μ (0) | 2023.03.13 |
---|---|
[Swift] Genericsμ λν΄μ (0) | 2023.03.09 |
[Swift] GCD(Grand Central Dispatch)μ λν΄μ (0) | 2023.03.01 |
[Swift] μ κ·μμ ν΅ν λ¬Έμμ΄ νλ¨ (0) | 2022.11.14 |
[Swift] λ¬Έμμ΄ μλ₯΄κΈ° λ° μ«μλ‘ λ°νμ΄ κ°λ₯νμ§ νμΈνκΈ° (0) | 2022.11.12 |