Swift Academy · 강의

할당과 누수 Instruments

힙 할당을 추적하고 메모리 누수와 좀비 객체를 찾습니다.

레슨 2/412개 단계

할당과 누수 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 released

Leaks 도구

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Instruments 기초: 시간 프로파일러
  2. 할당과 누수 Instruments
  3. 메인 스레드 검사기와 멈춤 현상
  4. 병목 경로 최적화: COW, 인라이닝 및 특수화
← Swift Academy(으)로 돌아가기