
두 가지 중요한 iOS 메모리 관리 관련 질문에 대해 자세히 답변하겠습니다.
ARC는 Swift와 Objective-C에서 메모리 관리를 자동으로 처리하는 시스템입니다. 컴파일 시점에 자동으로 retain/release 코드를 삽입하여 메모리를 관리합니다.
참조 카운팅
Strong Reference (강한 참조)
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "John") // 참조 카운트: 1
var person2 = person1 // 참조 카운트: 2
person1 = nil // 참조 카운트: 1
person2 = nil // 참조 카운트: 0, 메모리 해제
Reference Cycle 방지 방법
더 이상 사용되지 않는 메모리가 해제되지 않고 계속 남아있는 현상입니다.
강한 참조 순환 (Strong Reference Cycle)
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
// 메모리 누수 발생
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
클로저에서의 캡처 순환
class ViewController {
var completionHandler: (() -> Void)?
func setupHandler() {
// 메모리 누수 발생
completionHandler = {
self.view.backgroundColor = .red
}
}
}
weak, unowned 사용
class Child {
weak var parent: Parent? // weak 사용으로 순환 참조 해결
}
클로저에서 캡처 리스트 사용
completionHandler = { [weak self] in
self?.view.backgroundColor = .red
}
이러한 개념들은 iOS 개발에서 매우 중요하며, 실제 앱 개발 시 성능과 안정성에 직접적인 영향을 미치므로 잘 이해하고 있어야 합니다.