Today I Learned
23년 7월 19일 TIL
jjjkh
2023. 7. 19. 19:55
Swift 문법
✔️ ARC, 메모리 누수 해결법, 클래스와 구조체의 차이점
메모리 힙이란?
힙이란 동적할당 영역으로 사용자의 동적 할당에 기반하고 런타임에 크기가 결정된다.
메모리 스택이란?
메서드 호출 시 메서드의 지역변수, 매개변수, 리턴 값 등이 저장되고 메서드가 종료되면 저장된 메모리도 해제되고 컴파일 타임에 크기가 결정된다.
- ARC(Automatic Reference Counting)
// 레퍼런스 카운팅은 이론상을 기준으로 설명합니다.
class Student {
var name: String
var id: Int
init(name: String, id: Int) {
self.name = name
self.id = id
}
}
var student = Student(name: "Tom", id: 102345) // RC: 1️⃣
var tom = student // RC: 2️⃣
var studentPresident = student // RC: 3️⃣
print(student.name,student.id) // 출력값: Optional("Tom") Optional(102345)
print(tom.name,tom.id) // 출력값: Optional("Tom") Optional(102345)
print(studentPresident.name, studentPresident.id) // 출력값: Optional("Tom") Optional(102345)
studentPresident = nil // RC: 2️⃣
tom = nil // RC: 1️⃣
student = nil // RC: 0️⃣
- 스택에 tom인스턴스의 주소 값을 저장하면 tom 인스턴스에 접근할 때 stack에 저장된 그 주소값을 읽고 힙에 저장된 tom의 데이터를 찾아 읽을 수 있다.
- ARC는 Swift에서 자동으로 메모리를 관리해주는 방식이다. 레퍼런스 카운트가 0이 되면 더이상 참조되지 않는다고 판단하고
메모리에서 할당 해제시킨다.
- 참고자료