[swift] unowned 참조의 적절한 사용 시나리오
unowned
참조는 strong 참조와 달리 참조 대상이 항상 존재하는 경우에 사용됩니다. 일반적으로, 해당 객체가 dealloc되어도 프로그램이 여전히 정상적으로 동작할 때 사용됩니다.
적절한 사용 시나리오
- 의존성이 있는 참조:
unowned
는 객체 간의 강한 순환 참조를 방지하기 위해 사용됩니다. 예를 들어, 부모 뷰가 자식 뷰를 참조하고, 다시 자식 뷰가 부모를 참조할 때unowned
를 사용하여 강한 참조 순환을 방지할 수 있습니다.
class Parent {
unowned var child: Child?
// ...
}
class Child {
unowned var parent: Parent
// ...
}
- 클로저 캡처: 클로저가 self를 캡처하고 self가 클로저를 강하게 참조하는 순환 참조를 방지하기 위해
unowned
를 사용할 수 있습니다.
class NetworkManager {
func fetchData(completion: @escaping (Result) -> Void) {
// ...
}
}
class DataManager {
let networkManager = NetworkManager()
func fetchDataAndUpdateUI() {
networkManager.fetchData { [unowned self] result in
// ...
}
}
}
주의 사항
unowned
는 참조 대상이 항상 존재해야하므로, 참조 대상이 dealloc된 후에 해당unowned
참조를 사용하면 런타임 오류가 발생합니다.- 사용 시 의도한 대로 객체가 없을 때 런타임 오류가 발생하는지 확인하는 것이 중요합니다.
unowned
참조는 순환 참조를 방지하고 메모리 누수를 방지하는 데 유용하지만, 신중하게 사용해야 합니다. 올바른 상황에서 사용된다면 안전하고 효율적인 프로그래밍을 도울 수 있습니다.
참조: