주 내용은 다음에서 발췌하였습니다.
https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
Automatic Reference Counting — The Swift Programming Language (Swift 5.6)
Automatic Reference Counting Swift uses Automatic Reference Counting (ARC) to track and manage your app’s memory usage. In most cases, this means that memory management “just works” in Swift, and you don’t need to think about memory management your
docs.swift.org
간략하게 나마ARC가 무엇이냐 설명하면 다음과 같이 되어있다.
swift는 Automatic Refrence Counting(ARC)를 가지고 앱의 메모리 사용량을 관리한다.
대개 신경을 쓰지 않아도 자동으로 관리가 되지만 특정한 상황에서는 직접 관리를 해줘야한다.
(고대 Objective-c 개발자들 께서는 직접 관리하셨다는 소문이 있는데 천만 다행;;; )
아무래도 struct, enums는 value type이기 때문에 refrence counting은 클라스에만 적용이 된다.
클라스를 객체화할때마다 ARC가 메모리를 할당하여 정보를 저장한다.그리고 객체가 사라지게 되면 자동적으로 메모리를 free한다.
메모리를 릴리즈 하는 방법은 클라스내에 property들이 특정 객체와 참조하고 있는지를 파악하여 객체가 쓸모 있는지 아닌지 트래킹한다.
여기서 property가 객체와 참조하고 있는 것을 strong refrence라고 하는데 우리 흔히 weak var(let)을 하지 않는 이상 강한 참조(strong reference)한다.
예시
class Person {
let name: String
init(name: String) {
self.name = name
}
}
var reference1: Person?
var reference2: Person?
var reference3: Person?
//현재 참조 카운트 :0
위와 같이 weak를 쓰지 않았어도 옵셔널 타입이기 때문에 Person이라는 객체를 참조하지 않는다.
reference1 = Person(name: "John Appleseed")
//현재 참조 카운트 1
refrence1에 객체를 참조시킨다.
reference2 = reference1
reference3 = reference1
//현재 참조 카운트 3
reference1 = nil
reference2 = nil
위와 같이 2,3에 1을 참조 시키고 1,2를 nil 줘서 refrence count를 해제 시키면 어떻게 될까?
맨 처음 할당한 객체1을 해제 시켰으니 참조 카운트가 0이 되었을까?
답은 : 아니오 이다.
class는 refrence type이므로 이미 reference1,2,3각각 Person이라는 주소를 참조 하고 있다.
따라서 refrence3이 Person을 아직 참조 하고 있기 때문에 참조 카운트가 1로 유지 되고 Person객체는 메모리에서 해제 되지 않는다.
reference3 = nil
//참조 카운트 0
refrence 3까지 nil로 해줘야 정상적으로 메모리에서 해제가 된다.
이렇게 추상적으로 로그 없이 한번에 이해하기 어렵다면 한번 Person클라스에 로그를 출력하는 함수를 넣어서 직접 해보면 좋을 것이다.
(힌트 : init, deinit)
위와 같은 상황은 개발을 하다보면 생각보다 자주 나타는 상황은 아니다 앞으로 2,3 글에서는 실제 개발할때 발생할 수 있는 상황에 대하여 쓸 것이다.
다음 글
https://sm-ios-story.tistory.com/3
ARC란 무엇인가?(2)
주 내용은 다음에서 발췌하였습니다. https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html Automatic Reference Counting — The Swift Programming Language (Swift 5.6) Automati..
sm-ios-story.tistory.com
'iOS' 카테고리의 다른 글
KeyChain vs UserDefaults(1) (0) | 2022.11.17 |
---|---|
some 과 any 그리고 Any?(2) (0) | 2022.10.26 |
some 과 any 그리고 Any?(1) (0) | 2022.10.12 |
ARC란 무엇인가?(3) (0) | 2022.05.21 |
ARC란 무엇인가?(2) (0) | 2022.05.21 |