반응형
250x250
05-19 07:54
- 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
- 코딩테스트
- 코테
- 다트
- 디자인패턴
- swift
- 자료구조
- 프로그래머스
- coding test
- 인생 명언
- programmers
- 정렬알고리즘
- 프로그래머스 레벨2
- Design Pattern
- Algorithm
- swift split
- swift 알고리즘
- 스위프트
- 명언
- 감성 에세이
- swift 코딩테스트
- 프로그래머스 swift
- 스위프트디자인패턴
- sort
- 알고리즘
- 정렬
- rxswift
- dart
- datastructure
- programmer
- 감성에세이
Notice
Recent Posts
Recent Comments
Link
Archives
Bill Kim's Life...
[iOS] iOS 메모리 누수의 핵심 — Retain Cycle 한 번에 끝내기 본문
728x90
반응형
개요
iOS에서 가장 많이 놓치는 문제:
객체가 해제되지 않음 (deinit 안 호출됨)
의미
- 메모리가 계속 쌓임
- 앱 성능 저하
- 심하면 크래시 발생
주요 원인:
- 객체끼리 서로 강하게 참조 (strong reference)
문제 코드
class ViewController: UIViewController {
var closure: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
closure = {
self.view.backgroundColor = .red // ❌ retain cycle 발생
}
}
deinit {
print("deinit") // 호출 안 됨
}
}
문제:
- closure가 self를 강하게 참조
- self도 closure를 가지고 있음
→ 서로 놓지 않음 (메모리 누수)
해결 코드
방법 1: weak 사용 (가장 기본)
closure = { [weak self] in
self?.view.backgroundColor = .red
}
방법 2: unowned 사용 (확실한 경우만)
closure = { [unowned self] in
self.view.backgroundColor = .red
}
주의:
- self가 먼저 해제되면 크래시 발생
방법 3: deinit으로 확인
deinit {
print("deinit 호출됨 ✅")
}
이게 안 찍히면 100% 누수
🎯 한 줄 정리
메모리 누수 = 서로를 강하게 잡고 있음 → weak로 끊어라
728x90
반응형
'DEV Tips > iOS' 카테고리의 다른 글
| [iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유 (0) | 2026.03.22 |
|---|---|
| [iOS] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다 (0) | 2026.03.22 |
| [iOS] reloadData 했는데 UI가 안 바뀐다? iOS에서 가장 흔한 실수 (0) | 2026.03.22 |
| [iOS] iOS Auto Layout 에러 — “Unable to simultaneously satisfy constraints” 해결법 (0) | 2026.03.22 |
| [iOS] Xcode 14.3 버전에서 Archive 시 CocoaPods 스크립트 에러이슈(rsync) (0) | 2023.06.13 |
Comments
