본문 바로가기

arc

(3)
[swift] ARC | 약한참조 (weak) 약한참조 (weak) 약한참조 (weak) 는 강한참조와 달리 자신이 참조하는 인스턴스의 참조 횟수를 증가시키지 않는다. 참조 타입의 프로퍼티나 변수의 선언 앞에 weak 키워드를 써주면 그 프로퍼티나 변수는 자신이 참조하는 인스턴스를 약한참조한다. 약한참조를 사용한다면 자신이 참조하는 인스턴스가 메모리에서 해제될 수도 있다는 것을 예상해볼 수 있어야 한다. 자신이 참조 횟수를 증가시키지 않았기 때문에 그 인스턴스를 강한참조하던 프로퍼티나 변수에서 참조 횟수를 감소시켜 0으로 만들면, 자신이 참조하던 인스턴스가 메모리에서 해제되기 때문이다. 약한참조와 상수, 옵셔널 약한참조는 상수에서 쓰일 수 없다. 만약 자신이 참조하던 인스턴스가 메모리에서 해제된다면 nil이 할당될 수 있어야 하기 때문이다. 또한 n..
[swift] ARC | 강한참조 (Strong) 강한참조 (Strong) 인스턴스가 계속해서 메모리에 남아있어야 할 명분을 만들어 주는 것 인스턴스는 참조 횟수가 0이 되는 순간 메모리에서 해제되는데, 인스턴스를 다른 인스턴스의 프로퍼티나 변수, 상수 등에 할당할 때 강한참조를 사용하면 참조 횟수가 1 증가한다. 또한 강한참조를 사용하는 프로퍼티, 변수, 상수 등에 nil을 할당해주면 참조 횟수가 1 감소한다. 참조의 기본은 강한참조이므로 클래스 타입의 프로퍼티, 변수, 상수 등을 선언할 때 별도의 식별자를 명시하지 않으면 강한참조이다. class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { pr..
[swift] ARC란? (IBOutlet 선언할 때 weak을 왜 붙이는 걸까 알아보다가.. 여기까지 오게되었음) 매번 전달할 때마다 값을 복사해 전달하는 값 타입과는 달리, 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는 지가 중요한 문제이다. 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원을 낭비하게 되며, 이는 성능 저하로 이어진다. 그래서 스위프트는 프로그램의 메모리 사용을 관리하기 위해 메모리 관리 기법인 ARC를 사용한다. ARC와 값 타입 ARC가 관리해주는 참조 횟수 계산 (Reference Counting) 은 참조 타입인 클래스의 인스턴스에만 적용된다. 구조체, 열거형은 값 타입으로 참조 횟수 계산과 무관 ➡️ 구조체, 열거형은 다른 곳에서 참조..