[swift] weak self와 unowned self 사용
앱 개발을 하면서 메모리 누수를 방지하고, 강한 순환 참조를 피하기 위해 weak self와 unowned self 두 가지를 주로 사용합니다.
weak self
weak self는 참조 대상이 해제될 수 있는 (즉, optional) weak한 참조로, 순환 참조(circular reference)를 방지하는 데 사용됩니다. 보통 클로저에서 주로 사용됩니다.
someAsyncOperation { [weak self] result in
guard let self = self else { return }
// self를 안전하게 사용
}
unowned self
unowned self는 참조 대상이 항상 유효하다고 가정하는 unowned 참조로, non-optional입니다. 일반적으로 weak 참조가 nil이 될 수 있는 시나리오가 확실하지 않을 때 사용됩니다.
someClosure { [unowned self] in
// self를 안전하게 사용
}
보통 weak self와 unowned self는 옵셔널 체이닝뿐만 아니라 개발자가 메모리 관리를 더욱 신중하게 다룰 수 있도록 하는데 유용합니다.
참고: The Swift Programming Language - Automatic Reference Counting
이렇게, Swift에서 weak self와 unowned self를 사용함으로써 메모리 관리 및 순환 참조 문제를 더 효과적으로 다룰 수 있습니다.