weak와 unowned 참조
Youngminah opened this issue · 0 comments
Youngminah commented
참조
- 강력 순환 참조(Strong Reference Cycle)를 벗어나기 위해
- 약한 참조(weak reference)와
- 미소유 참조(unowned reference)를 사용
weak와 unowned
- Optional :
weak
와unowned
의 차이점은 옵셔널이냐 옵셔널이 아니냐의 차이 - 즉, unowned는 값이 있음을 가정하고 사용하며,
- unowned 값이 nil이라고 한다면 크래쉬가 발생할 수 있음.
- RC를 +1 시키지 않고 참조하는 것.
코드예제
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
weak var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
weak
를 사용하는 코드
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
deinit { println("\(name) is being deinitialized") }
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
deinit { println("Card #\(number) is being deinitialized") }
}
unowned
를 사용하는 코드
Apartment 클래스
에서 tenant 변수는 옵셔널로 사용하기 때문에 순환 참조를 피하기 위해서는weak
로 사용CreditCard 클래스
에서 customer 상수는 항상 값을 가지고 있어야 하므로 순환 참조를 피하고자unowned
로 사용