반응형
250x250
05-19 03:52
Today
Total
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유 본문

DEV Tips/iOS

[iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유

billnjoyce 2026. 3. 22. 20:49
728x90
반응형

개요

iOS에서 자주 하는 질문:

👉 “weak 쓸까? unowned 써도 되나?”

잘못 쓰면:

  • 메모리 누수 발생
  • 또는 앱 크래시 발생

의미

두 키워드의 차이:

  • weak → 참조 대상이 사라지면 자동으로 nil
  • unowned → 참조 대상이 항상 살아있다고 가정

👉 핵심:

  • unowned는 안전하지 않음 (nil 불가)

문제 코드

class ViewController: UIViewController {

    var closure: (() -> Void)?

    override func viewDidLoad() {
        super.viewDidLoad()

        closure = { [unowned self] in
            self.view.backgroundColor = .blue
        }
    }
}

👉 문제 상황:

  • ViewController가 먼저 메모리에서 해제됨
  • 이후 closure 실행됨

👉 결과:

  • self 접근 시 크래시 발생 💥

해결 코드

방법 1: weak 사용 (기본 선택)

closure = { [weak self] in
    guard let self = self else { return }
    self.view.backgroundColor = .blue
}

👉 특징:

  • 안전함
  • nil 체크 필요

방법 2: unowned는 “확실할 때만”

closure = { [unowned self] in
    self.view.backgroundColor = .blue
}

👉 사용 조건:

  • self가 closure보다 항상 오래 살아있을 때만

예:

  • self 내부에서만 즉시 실행되는 closure

한 줄 정리

👉 안전이 우선이면 weak, 100% 생명주기 확실할 때만 unowned

728x90
반응형
Comments