ARC

나이든별 / Oldstar·2022년 6월 27일
0

공부한 것

  • ARC

요약

  • Q : ARC는 무엇인가?
    • Automatic Reference Counting.
    • 메모리 관리를 사용자가 할 필요 없게 자동으로 관리해준다.
    • 애시당초 사용자가 손대야 할 메모리 영역은 힙 영역이므로, 이 경우 힙 영역의 메모리를 관리해준다고 생각하면 되겠다.
    • 힙 영역에 있는 인스턴스의 원본 클래스 정보를 들고 있다. 아무도 이 메모리 주소를 참조하지 않으면, 메모리에서 해제함으로써 성능의 향상을 꾀한다.
  • Q : ARC 이전의 메모리 관리는 어땠을까?
    • 완전수동!
    • 예를 들면 배열을 정의한다고 할 때, 시작하는 메모리 주소와 크기 등을 정해줘야 한다.
    • 이를 위해 포인터 변수라는 것도 사용했다.
    • 또한 다 쓴 변수는 메모리에서 해제도 따로 해 줘야 한다.
    • Objective-C에서는 MRR이라는 개념이 있다. Manual Retain Release
  • Q : ARC를 이해해야 하는 이유는 무엇무엇이 있을까?
    • 컴퓨터를 믿으면 안 되니까(…)
    • 주로, 강한 참조와 연관이 있을 것으로 생각이 된다.
    • 강한 참조를 이야기하기 전에, 먼저 ARC가 사용중인 변수를 임의판단해서 메모리에서 해제해 버리면? 크래쉬가 날 것이다.
    • 이를 방지하기 위해 ARC는 어떤 것들이 해당 변수를 참조하고 있는지 항상 주시한다. 그렇게 함으로써 마지막 하나가 해당 변수의 참조를 끝낼 때까지 해당 변수를 들고 있는다.
    • 이것이 강한 참조.
    • 그런데, 클래스끼리 서로의 강한 참조를 들고 있으면 강한 순환 참조가 발생해 버린다. 참조되고 있는 값의 참조 카운트가 1 밑으로 떨어지지 않는 것..
  • Q : 언제 구조체를 선택하고 언제 클래스를 선택해야할까?

고민한 점 및 생각해본 점

  • 편리함을 위해 구현되어 있는 것은 꼭 한 번은 뜯어 볼 필요가 있다는 것을 새삼 느꼈다. 컴퓨터는 믿을 수 없고, 편리함을 명목으로 내가 컨트롤할 수 있는 부분이 제한되어서는 안 되니까.
  • 한편으로는 또 제대로 내부 구조에 대해 알고 써야 좀 더 의도대로 사용하기 쉽지 않을까 하는 생각도 든다. ARC가 메모리를 다루는 데에는 분명히 규칙이 있고, 이를 알고 쓰면 대개의 경우 퍼포먼스의 상승을 가져오지만, 이를 알고 있지 못하면 메모리를 낭비할 수도 있다는 것이 좋은 예시.
profile
함께 나아가고자 하는 사람

0개의 댓글