0Pricing
Swift Academy · 강의

참조 순환: 원인과 탐지

Instruments로 객체와 클로저 사이의 참조 순환을 식별합니다.

참조 순환: 원인과 탐지은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

참조 순환은 둘 이상의 객체가 서로에 대해 강한 참조를 보유하여 ARC의 참조 개수가 절대 0이 되지 못하게 할 때 발생합니다. 그 결과 메모리 누수가 생깁니다.

간단한 두 객체 순환

```swift class Owner { var pet: Pet? } class Pet { var owner: Owner? } var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p // Owner → Pet (strong) p?.owner = o // Pet → Owner (strong) o = nil; p = nil // Neither deinit called — cycle! ```

부모-자식 순환

```swift class Node { var children: [Node] = [] var parent: Node? // strong → cycle with parent } let root = Node() let child = Node() root.children.append(child) child.parent = root // cycle ```

클로저 캡처 순환

```swift class ViewController { var onComplete: (() -> Void)? func setup() { onComplete = { // closure strongly captures self self.doWork() // ← cycle! } } } ```

델리게이트 패턴 순환

```swift protocol TaskDelegate: AnyObject { func didFinish() } class Task { var delegate: TaskDelegate? // if strong → potential cycle } class Manager: TaskDelegate { var task = Task() init() { task.delegate = self } // Manager → Task → Manager } ```

Instruments로 감지하기

Xcode Instruments에서 Leaks를 사용하십시오: 1. Instruments에서 앱을 실행합니다 2. Leaks 도구를 클릭합니다 3. 빨간색 표시가 누수된 객체를 나타냅니다 4. 참조 그래프를 확인하려면 더 자세히 살펴봅니다 또는 `deinit { print(...) }`을 설정하고 해당 코드가 실행되는지 확인하십시오.

Xcode 메모리 그래프로 감지하기

Xcode 디버거에서 Debug > Memory Graph Debugger를 선택하십시오. 누수된 객체를 클릭하면 해당 객체의 참조 연결을 볼 수 있습니다. 그래프에서 순환은 닫힌 고리로 표시됩니다.

일반적인 순환 패턴

• 델리게이트가 델리게이트를 강하게 저장하는 경우 • 클로저가 `self`를 강하게 캡처하는 경우 • 부모와 자식이 양방향으로 강한 참조를 보유하는 경우 • NotificationCenter 옵저버가 `self`를 캡처하는 클로저를 보유하는 경우 • 타이머의 대상이 `self`인 경우(강한 참조)

타이머 참조 순환

```swift class Poller { var timer: Timer? func start() { timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in self?.poll() // weak self breaks cycle } } deinit { timer?.invalidate() } } ```

NotificationCenter 참조 순환

```swift class Listener { var token: NSObjectProtocol? init() { token = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) { [weak self] _ in self?.refresh() } } deinit { NotificationCenter.default.removeObserver(token!) } } ```

빠른 확인

ARC에서 참조 순환이란 무엇입니까?

복습

핵심 내용: • 참조 순환: 서로 강한 참조를 유지하면 → 어느 쪽도 할당 해제되지 않음 • 흔히 발생하는 경우: 델리게이트, 클로저, 부모-자식 간 양방향 연결 • Instruments Leaks 또는 Xcode Memory Graph Debugger로 감지 • `weak` 또는 `unowned` 참조로 해결 • 타이머와 NotificationCenter도 순환을 일으킬 수 있음 — `[weak self]`로 끊기 다음 주제: 약한 참조와 비소유 참조

자주 묻는 질문

“참조 순환: 원인과 탐지” 강의는 무료인가요?

네 — “참조 순환: 원인과 탐지” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“참조 순환: 원인과 탐지”에서 뭘 배우나요?

Instruments로 객체와 클로저 사이의 참조 순환을 식별합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“참조 순환: 원인과 탐지” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ARC의 참조 수 계산 방식
  2. 참조 순환: 원인과 탐지
  3. weak 및 unowned 참조
  4. 클로저 캡처 목록과 [weak self]
← Swift Academy(으)로 돌아가기