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이 되면 더이상 참조되지 않는다고 판단하고

  메모리에서 할당 해제시킨다.

- 참고자료 

    https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/