안녕하십니까 공부하는 개발자 입니다.
오늘 포스팅은 메모리 관련 강의 입니다.
기본적으로 메모리의 경우에는 Code,Data, Stack, Heap 부분으로 나뉘어지고 있습니다.
⚙️Code
우리가 구현하는 부분입니다. 주로 swift나 obj-c로 구현을 하고 있습니다.
⚙️Data
Data 부분에는 정적변수와 전역변수가 저장하고 프로그램이 시작될때 생성 프로그램이 꺼졌을때 삭제됩니다.
⚙️heap
heap의 경우에는 동적으로 할당된 데이터가저장됨 공간의 크기를 알아내기 어렵습니다.
생성시점과 제거시점이 확실하지않아 코드로 삭제와 제거를 해줘야합니다.
⚙️stack
stack의 경우에는 지역변수와 파라미터 리턴값을 저장합니다.
함수호출과 밀접한 연관이 있어 함수에서 사용하는 모든 메모리가 생성됩니다.(stack Frame)
스택프레임의 경우 함수가 종료되면 차례대로 없어지며
값형식은 stack에 저장된다. 더이상 사용되지 않으면 삭제되기 때문에 메모리 관리가 상대적으로 쉽습니다.
참조형식의 경우에는 실제값을 heap에 저장하고 heap의 주소를 stack에 저장한다.
여기에서 값형식과 참조형식은 Swift의 객체를 나누는 기준이 된다.
값 형식 (value Type) : Struct, Enumeration, Tuple
참조형식 (Reference Type) : Class, Closure
⚙️Ownership Policy
Ownership Policy (소유정책) 은 instance는 하나 이상의 소유자가 있는 경우 메모리에 유지됩니다.
반대로 소유자가 없다면 메모리에서 삭제됩니다.
⚙️Reference Count
Reference Count(참조수)는 소유자가 있는지 없는지 판단하기위해 소유자의 count를 세는것입니다.
⚙️ARC(Automatic Reference Counting)
ARC란 Swift에서 메모리를 관리하기 위해 채택된 정책으로
객체에 대한 참조 카운트를 관리하고 0이 되면 자동으로 메모리 해제 합니다.
정 반대되는 개념으로는 MRC로 오브젝트C가 채택하고 있던 정책이 있습니다.
ARC의 경우에는 자동으로 소유정책을 자동으로 처리하여 MRC의 경우보다 안전하며 코드를 줄일수 있습니다.
⚙️Strong Reference Cycle
Strong Reference Cycle은 강한참조 사이클이라고 불리며
이러한 형식으로 instance가 서로 강한 참조로 묶여있어 person과 rentedCar을 nil로 참조를 끊어 Reference Count를
1줄여도 서로 참조하고 있기 때문에 메모리에서 소멸하지 않습니다.
이러한 경우에는 weak Reference(약한참조)나 unowned Reference(무소유 참조)를 사용하여 이러한 부분을 상쇄시켜 줘야 합니다.
'Ios > Swift' 카테고리의 다른 글
[Swift] 앱 생명주기 (App Lifecycle) .IOS (0) | 2024.06.19 |
---|---|
[Swift] Generic 스위프트 제네릭 (0) | 2022.08.07 |
[Swift] Protocol_2 스위프트 프로토콜 (0) | 2022.08.05 |
[Swift] Protocol_1 스위프트 프로토콜 (0) | 2022.08.04 |
[Swift] Extension 스위프트 형식의 확장 (0) | 2022.08.02 |