Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스 n번째 원소까지
- 연산자
- 프로그래머스 자동커밋
- 객체지향
- 프로그래머스 암호 해독
- array
- 스파르타코딩캠프
- Error installing cocoapods
- 프로그래머스 주사위 게임1
- Break
- 프로그래머스 문자열 정렬하기 (1)
- ruby설치
- 프로그래머스 배열 만들기1
- 문자열 정렬하기 (1)
- 스페인어
- 주사위 게임1
- 프로그래머스 조건에 맞게 수열 변경하기 3
- 문자열 붙여서 출력하기
- 프로그래머스 문자열 붙여서 출력하기
- Til
- cocoapods 설치 오류
- 배열 만들기1
- n번째 원소까지
- swift
- 프로그래머스 n의 배수 고르기
- 조건에 맞게 수열 변경하기 3
- 프로그래머스 최댓값 만들기(2)
- continue
- 스파르타 코딩클럽 내일배움캠프
- 프로그래머스
Archives
- Today
- Total
dev._.note
[Swift] ARC(Automatic Reference Counting) 본문
ARC란?
Swift의 ARC(Automatic Reference Counting)는 메모리 관리 기법 중 하나로, 객체나 인스턴스가 참조되는 횟수를 추적하여 메모리에서 해제할 시점을 결정. 객체가 생성될 때마다 참조 횟수가 1 증가하고, 해당 객체를 참조하는 다른 객체나 변수가 없어지거나 더 이상 사용되지 않을 때 참조 횟수가 1 감소. 참조 횟수가 0이 되면 해당 객체는 메모리에서 해제됨.
ARC의 작동 방식
- 객체 생성: 객체가 생성되면 참조 횟수가 1 증가.
- 객체 참조: 객체를 다른 변수나 상수에 할당하면 해당 객체의 참조 횟수가 1 증가.
- 참조 해제: 객체의 참조가 없어지면(참조하는 변수나 상수가 없거나 **nil**이 할당되면) 참조 횟수가 1 감소.
- Zeroing Weak References: 약한 참조(Weak Reference)는 객체의 참조 횟수를 증가시키지 않고 추적. 객체가 해제되면 약한 참조는 자동으로 nil로 설정.
ARC의 판단기준
특정 객체가 더 이상 사용되지 않는다는 것을 ARC는 특정 클래스 객체를 참조하는 변수, 상수, 프로퍼티들의 개수를 카운팅함.
특정 객체에 적어도 하나라도 참조변수가 존재한다면 ARC에서는 메모리 해제를 발생시키지 않음.
반대로, 활성화된 참조변수가 존재하지 않는다면 ARC는 특정 객체를 메모리로부터 해제시킴.
쉽게 말해, 특정 객체 하나가 존재하고 이를 여러곳의 변수가 참조할 때 한 객체에 대한 count가 증가.
class SomeValue {
var name: String
init(name: String) {
self.name = name
}
}
let someValue = SomeValue(name: "팀쿡") // reference count => 1
let someValue2 = someValue // reference count => 2
ARC 예제
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 = Person(name: "John Appleseed")
reference2 = reference1
reference3 = reference1
reference1 = nil
reference3 = nil
reference2 = nil
'Dev > SWIFT' 카테고리의 다른 글
[Swift] 스레드(Thread) (0) | 2023.12.14 |
---|---|
[Swift] 프로토콜(Protocol) (0) | 2023.12.13 |
[Swift] 예외처리 (0) | 2023.12.11 |
[Swift] 클로저(Closure) (0) | 2023.12.10 |
[Swift] Guard문 (0) | 2023.12.08 |