Swift는 ARC를 사용해 메모리를 관리한다.
Reference counting은 오직 class의 인스턴스에만 적용된다. reference type이 아니라 value type인 structure와 enumeration은 reference를 통해 저장되고 전달되지 않기 때문이다.
class의 새로운 인스턴스를 생성할 때 마다, ARC는 그 인스턴스에 관한 정보를 저장하기 위한 메모리를 할당한다. 이 메모리는 인스턴스의 타입에 대한 정보 그리고 인스턴스와 관련된 property등을 저장하게 된다.
인스턴스가 더 이상 필요하지 않게 되면, ARC는 그 인스턴스에게 할당된 메모리를 해제한다. 만약 ARC가 계속 사용중인 인스턴스의 메모리를 해제하게 된다면 그 인스턴스에 속한 프로퍼티나 메소드에 더 이상 접근하지 못하게 된다. 이 상태에서 인스턴스에 접근하려 하면 높은 확률로 앱이 크래시가 날 것이다.
인스턴스가 사용중일 때 메모리에서 해제되는 대참사를 막기 위해서 ARC는 각 class 인스턴스를 참조하는 property, constant, variable 등이 몇 개가 있는지 추적한다. 단 하나라도 인스턴스를 참조하는 것이 있다면 ARC는 인스턴스를 메모리에서 해제하지 않을 것이다.
class 인스턴스를 property, constant 또는 variable에 할당할 때, 그 property, constant, variable은 인스턴스에 'strong reference'를 만들게 된다. 이 strong reference가 남아있는 한 인스턴스는 메모리에서 해제될 수 없다.
참조 및 출처 : https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html