일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- weatherkit
- iot
- LifeCycle
- WWDC24
- flutter
- dart
- SampleApp
- Xcode
- 문법
- isolate
- network
- builder
- Architecture
- tuist
- URLSession
- swift
- OpenAI
- philipshue
- dartz
- SwiftUI
- EventLoop
- embedded-swift
- chartsorg
- dgcharts
- uikit
- raspberrypi5
- AppleDeveloper
- GIT
- WebSocket
- designpattern
Archives
- Today
- Total
Jaebi의 Binary는 호남선
ARC (Automatic Reference Counting) 본문
목차 Open
ARC
- 메모리 영역중 Heap 영역을 관리
- Swift는 인스턴스, 클로저 등등 참조 타입을 자동으로 Heap에 할당
- ARC는 클래스 인스턴스가 더 이상 필요하지 않을 때 메모리를 자동으로 해제함
- Reference Count로 메모리를 관리 → 메모리 참조 횟수를 계산하여 참조 횟수가 0이 되면 더 이상 사용하지 않는 메모리라 판단하여 해제
- 모든 인스턴스는 자신의 RC값을 가지고 있으며 누가 가르키고 있느냐 없느냐를 숫자로 표현됨
Process
class Human {
var name: String?
var age: Int?
init(name: String?, age: Int?) {
self.name = name
self.age = age
}
}
let sodeul = Human(name: "Sodeul", age: 26)
![]() |
|
let clone = sodeul
![]() |
|
func makeClone(_ origin: Human) {
let clone = origin // ② Instance RC : 2
}
let sodeul = Human(name: "Sodeul", age: 26) // ① Instance RC : 1
makeClone(sodeul)
// ③ Instance RC : 1
![]() |
|
var sodeul: Human? = .init(name: "Sodeul", age: 26) // ① Instance RC : 1
var clone = sodeul // ② Instance RC : 2
clone = nil // ③ Instance RC : 1
sodeul = nil // ④ Instance RC : 0 (메모리 해제)
|
|
var sodeul: Human? = .init(name: "Sodeul", age: 26) // ① Sodeul Instance RC : 1
var clone: Human? = .init(name: "Sodeul2", age: 26) // ② Clone Instance RC : 1
sodeul = clone // ③ Clone Instance RC : 2, Sodeul Instance RC : 0 (메모리 해제)
|
|
class Contacts {
var email: String?
var address: String?
init(email: String?, address: String?) {
self.email = email
self.address = address
}
deinit { print("Contacts Deinit)" } }
}
class Human {
var name: String?
var age: Int?
var contacts: Contacts? = .init(email: "o_o@naver", address: "Suwon")
init(name: String?, age: Int?) {
self.name = name
self.age = age
}
deinit { print("Human Deinit)" } }
}
let sodeul: Human? = .init(name: "Sodeul", age: 26)
sodeul = nil
![]()
![]()
![]()
![]()
|
|
Strong, Weak, Unowned
Strong | Weak | Unowned | |
설명 | ![]() ![]()
|
![]() ![]() ![]() ![]() ![]()
|
![]()
![]()
|
Reference Counting | O | X | X |
사용 시점 |
|
|
|
특징 |
|
|
|
Reference
iOS) 메모리 관리 (1/3) - ARC(Automatic Reference Counting)
안녕하세요~~ 소들입니다 👀 오늘은 지난 시간 메모리 구조에 이어 Swift를 사용할 때 메모리 관리가 어떤 식으로 되는지에 대해 공부해볼 거예요 :) ARC 면접 단골 질문이라죠? 깔깔 iOS 개발자라
babbab2.tistory.com
'Swift' 카테고리의 다른 글
App Lifecycle (0) | 2024.07.21 |
---|---|
SwiftUI - App Protocol (0) | 2024.07.21 |
Swift - Memory 기초 (0) | 2024.07.20 |
Swift - 문법 (접근 제어) (0) | 2024.07.20 |
Swift Local Network Connection (0) | 2024.06.19 |