ARC

apwierk·2022년 5월 31일
0

개인 공부

목록 보기
5/20

메모리의 구조

Q. 컴퓨터의 주기억장치는 어떤어떤 영역을 가지고 있을까?

  • 스택, 힙, 데이터, 코드 영역이 있다
  • 스택은 지역변수, 리턴값, 매개변수 등이 저장되고, 메모리의 높은 주소에서 낮은 주소로 할당된다. 이게 다른 메모리 영역을 침범하면 스택 오버플로우 발생
  • 힙은 사용자(프로그래머)가 직접 관리하는 메모리 영역. malloc, dealloc 등을 통해 관리할 수 있다. 낮은 주소에서 높은 주소로 할당되며, 침범시 힙 오버플로우 발생
  • 데이터와 코드 영역은 파일의 크기에 영향을 끼친다. 힙 밑에 로드된다. 데이터 영역은 프로그램의 정적 변수와 전역 변수 등이 저장된다. 코드 영역은 프로그램의 코드가 저장된다.

ARC

Q : ARC는 무엇인가?

  • Auto Reference Count
  • 메모리 영역 중 힙 영역을 관리한다.
  • 인스턴스에서 사용하는 메모리를 해제하여 메모리를 다른 용도로 사용할 수 있도록 한다.
  • ARC가 사용 중인 인스턴스의 할당을 해제하는 경우 해당 인스턴스의 속성에 액세스하거나 해당 인스턴스의 메서드를 호출할 수 없다.
  • 이를 가능하게 하려면 속성, 상수, 변수에 클래스 인스턴스를 할당할 때마다 강력한 참조를 만들어주면 된다.

ARC 이전의 메모리 관리는 어땠을까?

  • iOS의 경우, Objective-C 시절 MRR(Manual Reference Control)을 사용했다.
  • 공식 문서에서는 MRR(Manual Retain Release)라는 표현이 나온다.
  • retain, release, autorelease 등을 통해 수동으로 메모리를 관리했다.

ARC를 이해해야 하는 이유는 무엇무엇이 있을까?

  • 주로, 강한 참조와 연관이 있을 것으로 생각이 된다.
  • 강한 참조를 이야기하기 전에, 먼저 ARC가 사용중인 변수를 임의판단해서 메모리에서 해제해 버리면? 크래쉬가 날 것이다.
  • 이를 방지하기 위해 ARC는 어떤 것들이 해당 변수를 참조하고 있는지 항상 주시한다. 그렇게 함으로써 마지막 하나가 해당
  • 변수의 참조를 끝낼 때까지 해당 변수를 들고 있는다.
  • 이것이 강한 참조.
  • 그런데, 클래스끼리 서로의 강한 참조를 들고 있으면 강한 순환 참조가 발생해 버린다. 참조되고 있는 값의 참조 카운트가 1 밑으로 떨어지지 않는 것…

언제 구조체를 선택하고 언제 클래스를 선택해야할까?

profile
iOS 꿈나무 개발자

0개의 댓글