Q. ARC, MRC란 무엇인지 설명해주세요
A.
1.
ARC는 자동으로 HeapObject안에 들어있는 Reference Count를 계산해서 메모리를 관리해주는 방법입니다.
-> Java의 Garbage Collector와는 다르게 컴파일 시점에 실행됩니다.
2.
MRC는 수동으로 Reference Count를 계산합니다.
Retain, release 메서드를 직접 작성해줘야 합니다. Objective-C 에서 사용합니다.
cf)
- 동적 할당으로 인스턴스가 생성되면 해당 정보는 HeapObject라는 struct로 관리된다.
- HeapObject에는 동적 할당되는 객체를 구성하는 데이터. 즉, reference count와 type meta data를 갖습니다.
Q. ARC는 compile time에 실행되는데 어떻게 동적으로 실행되는 것들의 reference count를 세고 메모리 관리를 할 수 있나요?
A.
1.
ARC는 compile time에 자동으로 retain과 release 코드를 적절한 위치에 삽입해줍니다.
MRC에서 수동으로 작성하던 메서드를 자동으로 작성해줍니다.
2.
Run time에 코드가 실행되다가 retain/release에 의해 count가 0되면 메모리를 해제합니다.
Q. ARC와 GC는 어떤 차이점이 있나요?
A.
1.
ARC는 컴파일 타임에 실행되고, GC는 런타임에 실행됩니다.
2.
이에 따라 ARC는 런타임 성능이 좋아진다는 장점을 갖지만, 앱 실행 중 순환참조 발생 시 매우 치명적이라는 단점을 갖습니다.
3.
GC는 런타임에 참조를 계속 추적하는 리소스가 필요하다는 단점을 갖지만,
ARC에 비해 치명적인 메모리 누수를 막을 확률이 높다는 장점을 갖습니다.
Q. ARC가 메모리 해제를 할 수 없는 상황에 대해 설명해보세요.
A.
1.
ARC의 경우 단순히 컴파일 타임에 reference counting을 통해 메모리 관리를 하기 때문에 순환 참조가 발생할 경우 메모리 해제가 어렵습니다.
2.
GC는 런타임에 Mark-and-Sweep 방식으로 모든 인스턴스를 체크합니다.
따라서 순환참조가 발생하더라도 메모리를 해제할 수 있습니다.
- Mark: 메모리 영역을 탐색하며 사용중인 객체 표시
- Seep: 표시되지 않은 객체를 메모리에서 제거
Ref
https://velog.io/@heyksw/iOS-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84-ksl8uxwf#7-arc--mrc--gc
반응형
'🗣️ 면접 > 면접질문정리' 카테고리의 다른 글
메모리 관리 (0) | 2023.05.18 |
---|---|
옵저버 패턴 (0) | 2023.05.18 |
MVVM, MVC 패턴 (0) | 2023.05.18 |