할당과 누수 Instruments
힙 할당을 추적하고 메모리 누수와 좀비 객체를 찾습니다.
할당과 누수 Instruments은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Allocations 도구
Allocations 도구는 모든 힙 할당과 해제를 추적하여 시간에 따른 메모리 증가를 보여 줍니다.
// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objects힙 증가 분석
앱을 실행하면서 Live Bytes 그래프를 확인합니다. 정체 구간 없이 꾸준히 증가하면 메모리 누수를 의미합니다.
// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never released세대 분석
사용자 흐름 전후에 세대 스냅샷을 표시하여 예상치 못하게 유지된 객체를 확인합니다.
// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't releasedLeaks 도구
Leaks 도구는 주기적으로 힙을 검사하고 할당되었지만 도달할 수 없는 객체(참조 유지 순환)를 식별합니다.
// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graph누수 그래프 읽기
누수 객체 그래프는 순환 구조에서 어떤 객체가 서로를 유지하는지 보여 주어 참조 유지 순환의 근본 원인을 찾을 수 있게 합니다.
// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visually클로저의 참조 유지 순환 감지하기
가장 흔한 누수는 클로저가 self를 강하게 캡처하고 self가 그 클로저를 보유하는 경우입니다.
class MyVC: UIViewController {
var onComplete: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
// LEAK: closure captures self; self holds onComplete
onComplete = { self.dismiss(animated: true) }
// FIX:
onComplete = { [weak self] in self?.dismiss(animated: true) }
}
}VM Tracker 도구
VM Tracker는 가상 메모리 영역과 변경된 페이지를 보여 줍니다. 변경된 메모리 압력이 높으면 iOS가 앱을 종료합니다.
// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memory좀비 객체
Instruments에서 좀비 객체를 활성화하면 해제된 객체를 감지할 수 있습니다. 이러한 객체는 "좀비"로 변환되어 접근될 때 기록을 남깁니다.
// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"힙 샷
두 힙 상태를 "힙 샷"으로 비교하면 두 샷 사이에 살아남은 객체를 찾을 수 있어 뷰 컨트롤러 누수를 감지하는 데 유용합니다.
// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or models프로덕션 메모리를 위한 MetricKit
MXMetricPayload를 사용하여 프로덕션 환경의 실제 사용자로부터 메모리 및 성능 데이터를 수집합니다.
import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach { print($0.memoryMetrics as Any) }
}
}간단한 확인
Allocations 도구에서 "Live Bytes" 그래프가 꾸준히 증가한다는 것은 무엇을 의미합니까?
강의 요약
Allocations를 사용해 힙 증가와 세대 스냅샷을 추적합니다. Leaks를 사용해 참조 유지 순환을 감지하고 객체 그래프를 확인합니다. 좀비 객체를 사용해 과도한 해제로 인한 버그를 찾습니다. [weak self]를 사용해 클로저를 수정합니다. MetricKit을 사용해 프로덕션 환경에서 실제 사용자 메모리를 추적합니다.
AI 튜터와 함께 Swift을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 122
- 레슨
- 409
자주 묻는 질문
“할당과 누수 Instruments” 강의는 무료인가요?
네 — “할당과 누수 Instruments” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“할당과 누수 Instruments”에서 뭘 배우나요?
힙 할당을 추적하고 메모리 누수와 좀비 객체를 찾습니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“할당과 누수 Instruments” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Instruments 기초: 시간 프로파일러
- 할당과 누수 Instruments
- 메인 스레드 검사기와 멈춤 현상
- 병목 경로 최적화: COW, 인라이닝 및 특수화