반응형
250x250
05-19 03:52
- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 프로그래머스 레벨2
- 프로그래머스
- 스위프트디자인패턴
- 감성 에세이
- 디자인패턴
- datastructure
- 코딩테스트
- dart
- swift
- swift 알고리즘
- 프로그래머스 swift
- 스위프트
- 정렬알고리즘
- swift split
- 알고리즘
- programmers
- 코테
- 자료구조
- coding test
- Design Pattern
- 정렬
- Algorithm
- rxswift
- swift 코딩테스트
- 다트
- programmer
- sort
- 명언
- 인생 명언
- 감성에세이
Notice
Recent Posts
Recent Comments
Link
Archives
Bill Kim's Life...
[iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유 본문
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
반응형
'DEV Tips > iOS' 카테고리의 다른 글
| [iOS] 이미지 깜빡임 & 잘못된 이미지 표시 — 비동기 로딩의 함정 (0) | 2026.03.22 |
|---|---|
| [iOS] UITableView 셀 재사용 버그 — 데이터가 섞이는 진짜 이유 (0) | 2026.03.22 |
| [iOS] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다 (0) | 2026.03.22 |
| [iOS] iOS 메모리 누수의 핵심 — Retain Cycle 한 번에 끝내기 (0) | 2026.03.22 |
| [iOS] reloadData 했는데 UI가 안 바뀐다? iOS에서 가장 흔한 실수 (0) | 2026.03.22 |
Comments
