ARC에 대해서 궁금한 게 있어서 공부하다가 WWDC21에 좋은 영상이 있어 정리해봤습니다. 주제는 스위프트의 ARC! 스위프트는 구조체 및 열거형과 같은 강력한 벨류 타입을 제공합니다. 레퍼런스 타입에서 의도치 않게 sharing되는 것의 위험을 피하기 위해서는 벨류 타입을 사용하는 것을 지향해야 합니다. 스위프트에서 클래스는 레퍼런스 타입이며 클래스를 사용하다면? 스위프트는 ARC를 통해 메모리를 관리합니다. 효과적인 코드를 작성하려면 ARC를 이해하는 것이 중요합니다. 스위프트에서 객체의 lifetime은 초기화 시점에서 시작되고 마지막으로 사용될 때 종료됩니다. ARC는 lifetime이 끝난 후 객체 할당을 해제하여 자동으로 메모리를 관리합니다. 또 ARC는 reference count를 추적해..
https://hyerios.tistory.com/33 앞에서 말한 메모리 누수의 원인인 순환 참조는 어떻게 해결할 수 있을까요 이를 해결하기 위한 방법은 두가지가 존재합니다. - weak reference 약한 참조 - unowned reference 미소유 참조 즉 강한 참조로 하지 않고도 약한 참조와 미소유 참조로도 서로를 참조할 수 있습니다. 그럼 여기서 드는 궁금증 Q. weak, unowed reference의 차이점은 뭐야! 약한 참조는 옵셔널이며 미소유 참조는 옵셔널이 아닙니다. Q. weak, unowed reference는 언제 사용할까요! 약한 참조는 다른 인스턴스의 수명이 짧을 때 사용합니다. 미소유 참조는 다른 인스턴스의 수명이 같거나 긴 경우 사용합니다. weak referenc..
스위프트의 ARC는 앱의 메모리 사용을 추적하고 관리합니다. https://hyerios.tistory.com/32에서 ARC란 무엇인지 알아보았습니다. ARC는 Person인스턴스에 대한 참조 카운트를 추적하고 Person이 더 이상 필요하지 않으면(참조 카운트가 0이 되면) 인스턴스 할당을 해제했습니다. 자동으로 관리해줌에도 불구하고 신경 써줘야 하는 게 있다고 했는데 그것은 메모리 누수입니다. 그럼 순환참조는 어떤 상황에 발생될까요 .ㅇ. 클래스 인스턴스 간 순환 참조 두 개의 클래스의 인스턴스가 서로 강한 참조로 각 인스턴스가 다른 인스턴스를 참조하는 경우 순환 참조(strong reference cycle)가 생깁니다. 예를 들어 class Person { let name: String init..
ARC란 스위프트의 ARC(Automatic Reference Counting)는 앱의 메모리 사용을 추적하고 관리합니다. 그렇기 때문에 따로 메모리를 어떻게 관리해야 하는지 생각할 필요가 없습니다. ARC는 클래스 인스턴스가 더 이상 필요하지 않을 때 클래스 인스턴스가 사용하는 메모리를 자동으로 비우기 때문입니다. (하지만 몇 가지 부분에서 신경 써줘야 하는 게 있음 ㅎㅋㅎㅋ) 레퍼런스 카운팅은 오직 클래스의 인스턴스에만 적용됩니다. 말 그대로 reference counting 참조 카운팅 = 레퍼런스 카운팅은 참조 타입만 해당합니다. 구조체/struct와 열거형/enum은 값 타입이므로 참조값을 저장하거나 전달하지 않아 이에 해당하지 않습니다. ARC 동작 방식 클래스의 새 인스턴스를 만들 때마다 A..
Q delegate는 왜 Weak로 선언할까요? A Retain cycle 을 피하기 위해서! 기본적으로 클래스의 객체를 가리키는 각각의 reference는 강함 참조(strong)입니다.두 클래스 인스턴스가 서로 강한 참조를 하게 되면 그것이 Retain Cycle이 됩니다. 서로 강한 참조를 하고 있으면 사용하지 않는데도 deinit 되지 않습니다. 만약에 객체에 대한 강한 참조가 존재하지 않는다면 메모리에서 자동으로 해제됩니다.weak로 선언한다면 강한 참조가 되지 않아 객체의 메모리가 해제되면 자동으로 nil이 될 것입니다. Retain Cycle은 delegate에서는 흔하게 발생합니다. 그래서 delegate를 사용할 땐 대부분의 상황에 weak로 선언합니다.UITableViewDelegate..
- Total
- Today
- Yesterday
- 독서
- 알고리즘
- ARC
- leetcode
- SWIFT
- Animation
- string
- iOS SwiftUI
- 문자열
- 머신러닝
- objective-c
- rxswift
- 딥러닝
- 책 추천
- stanford SwiftUI
- 스위프트
- Deep learning
- RX
- wwdc
- 애니메이션
- swift5
- Algorithm
- objc
- 스위프트UI
- swiftUI
- 책 후기
- ReactiveX
- ios
- 책
- Xcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |