ARC(Automatic Reference Counting)
Swift 에서는 앱의 메모리 사용을 추척 및 관리하기 위해 ARC를 사용합니다. Automatic에서 알 수 있듯이 해당 인스턴스가 필요 없을때 메모리를 자동으로 해제합니다. 인스턴스가 필요없는 순간은 Refenrence Count가 0이 되는 순간을 뜻합니다.
간단한 예제를 보면
class Person {
let name: String
init(name: String) {
self.name = nameprint("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
우선 이니셜라이저를 통해 name 프로퍼티를 초기화하는 Person 클래스를 생성합니다
var reference1: Person?
reference1 = Person(name: "John Appleseed")
다음으로 Person 타입의 옵셔널 변수를 선언하고 Person 인스턴스를 선언해줍니다.
인스턴스를 선언하게 되면 Person 클래스의 이니셜라이즈가 호출 되고 "John Appleseed is being initialized" 가 출력됩니다.
이는 reference1 는 Person 인스턴스에 대해 강한 참조가 발생함을 의미하고 Reference Count 가 1 증가함을 의미합니다.
reference1 = nil
이와 같이 reference1 에 nil을 할당 하게 되면 Person 인스턴스와의 참조가 끊어지게 되고 Reference Count는 1 감소하게 됩니다. ARC는 해당 인스턴스가 필요 없을때 즉, Reference Count가 0이 되는 순간 메모리를 자동으로 해제시킨다고 했는데요. 여기서 reference1가 인스턴스와 참조가 끊어지는 순간을 ARC는 더이상 Person 인스턴스가 메모리에 적재 될 필요가 없겠다고 판단하여 메모리에서 해제하게 됩니다.
따라서 Person의 deinit이 실행되고 "John Appleseed is being deinitialized" 이 출력되는것을 볼 수 있습니다.
이번 포스팅에서는 count 가 0인 지점에 도달하는 간단하고 베이식한 예시를 보여드렸다면 다음 포스팅에서는 count 가 0인 지점에 도달하지 않는 코드를 예시로 발생할 수 있는 문제점과 이를 해결하기 위한 방법은 무엇이 있는지 알아보겠습니다.
'iOS > Swift' 카테고리의 다른 글
[Swift] 클로저 (Closures) 란? (0) | 2022.01.19 |
---|---|
[Swift] ARC 개념 및 weak, unowned 알아보기 (2) (0) | 2022.01.15 |