5월 31일 (화)

apwierk·2022년 5월 31일
0

TIL

목록 보기
18/33

5월 31일 (화)

ARC

  • Auto Reference Count

  • 메모리 영역 중 힙 영역을 관리한다.

  • 인스턴스에서 사용하는 메모리를 해제하여 메모리를 다른 용도로 사용할 수 있도록 한다.

  • ARC가 사용 중인 인스턴스의 할당을 해제하는 경우 해당 인스턴스의 속성에 액세스하거나 해당 인스턴스의 메서드를 호출할 수 없다.

  • 이를 가능하게 하려면 속성, 상수, 변수에 클래스 인스턴스를 할당할 때마다 강력한 참조를 만들어주면 된다.

swift는 인스턴스, 클로저 등 참조 타입은 자동으로 에 할당한다.

예제

class Human {
	var name: String?
	var age: Int?

	init(name: String?, age: Int?) {
		self.name = name
		self.age = age
	}
}

let bonf = Human(name:"bonf", age: 29)


해당 코드는 그림과 같이 저장된다.

지역 변수 bonf스택(주소값)에 할당되고

실제 Human 인스턴스에 할당된다.

참조 타입의 특성 중 ‘복사가 되지 않는다’는 특성을 예로 들면

let chan = bonf



해당 인스턴스를 사용하고 난 후에는 반드시 메모리 해제를 해줘야 한다.

스택에 있는 bonf, chan은 함수 종료 시점에서 사라진다.

힙 영역에 남은 인스턴스를 ARC가 해제 해준다.

위 상황을 설명하자면 bonf, chan 이 주소 값을 저장한다.

bonf, chan 두 개의 참조가 있으므로 RC = 2 가 되

ARC가 힙 영역의 데이터를 지워준다.

스택 영역의 데이터가 nil이 됐을 때 힙 영역의 데이터도 같이 지워주게 하려면,

약한 참조 (weak)으로 할당해주면 된다.
class,struct
ARC

profile
iOS 꿈나무 개발자

0개의 댓글