728x90
반응형
SMALL
iOS에서 강한 순환 참조가 발생하는 경우는 대부분 뷰 컨트롤러나 뷰, 델리게이트 등에서 발생합니다. 이러한 상황에서는 메모리 누수 문제가 발생할 수 있으므로, 강한 순환 참조를 해결해야 합니다.
강한순환참조 코드예제
class ViewController: UIViewController {
var model: Model?
override func viewDidLoad() {
super.viewDidLoad()
model = Model()
model?.delegate = self
}
}
class Model {
var delegate: ViewController?
func updateData() {
delegate?.updateView()
}
}
위 코드에서는 ViewController 클래스와 Model 클래스가 서로를 참조하고 있습니다.
- ViewController 클래스는 Model 객체를 생성
- Model 클래스는 ViewController 객체를 델리게이트로 참조
이러한 상황에서는 ViewController 객체가 해제되어도 Model 객체가 계속해서 ViewController 객체를 참조하게 되어 메모리 누수 문제가 발생할 수 있습니다.
강한 순환 참조를 해결하는 방법으로는 약한 참조(weak reference)를 사용하는 것입니다.
위 예제 코드에서는 delegate 프로퍼티를 weak로 선언하여 ViewController 객체를 약한 참조하도록 수정할 수 있습니다.
delegate 프로퍼티를 weak로 선언하여 ViewController 객체를 약한 참조하도록 수정한 코드 예제
class ViewController: UIViewController {
var model: Model?
override func viewDidLoad() {
super.viewDidLoad()
model = Model()
model?.delegate = self
}
func updateView() {
// update view
}
}
class Model {
weak var delegate: ViewController?
func updateData() {
delegate?.updateView()
}
}
이제 ViewController 객체가 해제되면 Model 객체도 함께 해제되므로, 메모리 누수 문제가 발생하지 않습니다.
728x90
반응형
LIST
'iOS' 카테고리의 다른 글
iOS UDP 통신 쉬운 예제 코드 (0) | 2023.04.30 |
---|---|
TCP, UDP (0) | 2023.04.29 |
AppDelegate (0) | 2023.04.27 |
ViewController Life Cycle (0) | 2023.04.27 |
iOS 면접 질문 (0) | 2023.04.26 |