라벨이 memory인 게시물 표시

[swift] 메모리 관리 - Retain Cycle : strong, weak, unowned

이미지
[swift] Retain Cycle : strong, weak, unowned strong, weak, unowned 사용 방법 클래스의 객체를 가리키는 참조의 기본값은 강한 참조이다. 그리고 적어도 하나의 강한 참조가 있다면 객체의 메모리는 ARC(Automatic reference counting)에 의해서 해제되지 않는다. 아래 예제를 통해 살펴보자 // Case1 : 일반 참조와 해제 class TestClass { init(){ print("init") } deinit{ print("deinit") } } var testClass: TestClass? = TestClass() print("Instance is created!") testClass = nil // print init Instance is created! deinit TestClass 객체가 생성되면서 init 을 출력한다. 그 다음에 "Instance is created!" 를 출력한다. testClass 변수에 nil을 할당하면서 참조의 갯수가 0이 되고 deinit 을 출력한 뒤 메모리에서 해제된다. 다음 예제를 통해 ARC가 동작하지 않아 메모리에서 해제되지 않는 상황을 살펴보자. // Case 2 : 강한 상호참조 class TestClass{ var testClass: TestClass? = nil init(){ print("init") } deinit{ print("deinit") } } var testClass1: TestClass? = TestClass() var testClass2: TestClass? = TestClass() testClass1?.testClass = testClass2