본문 바로가기
iOS/Swift

[Swift] ARC 개념 및 weak, unowned 알아보기 (1)

by 뚱이 2022. 1. 4.

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