[swift] weak 참조와 클로저 캡처 리스트
클로저 내부에서 객체를 참조할 때 메모리 누수를 방지하기 위해 weak
참조를 사용할 수 있습니다. 이 포스트에서는 Swift에서 weak
참조와 클로저 캡처 리스트를 사용하는 방법을 살펴보겠습니다.
weak
참조란?
weak
참조는 참조하는 객체가 메모리에서 해제될 때 자동으로 nil
로 설정되는 참조 방식을 말합니다. 이를 통해 Strong Reference Cycle을 방지하고 메모리 누수를 방지할 수 있습니다.
class Person {
let name: String
lazy var printName: () -> Void = { [weak self] in
guard let self = self else { return }
print("My name is \(self.name)")
}
init(name: String) {
self.name = name
}
deinit {
print("Person instance \(self.name) is deallocated")
}
}
위의 코드에서 클로저 내부에서 self
를 weak
로 캡처하여 메모리 누수를 방지하고 있습니다.
클로저 캡처 리스트
클로저에서 외부 변수나 상수를 참조할 때, 해당 값을 캡처하여 클로저 내부에서 사용할 수 있습니다.
var outsideValue = 10
let closure = { [outsideValue] in
print(outsideValue)
}
클로저에서 외부 변수 outsideValue
를 캡처하여 사용하기 위해 캡처 리스트를 사용하고 있습니다.
weak
참조와 클로저 캡처 리스트는 Swift에서 메모리 관리와 클로저 관련 작업을 수행할 때 유용하게 활용될 수 있는 기능입니다.
참고 자료: Apple Developer Documentation