minaje

메모리 누수 방지하는 방법! 본문

iOS/기초 지식

메모리 누수 방지하는 방법!

minaje 2023. 10. 17. 14:15

전 포스팅에서 메모리 누수, 순환참조에 대해서 공부를 해봤으니 이번 포스팅은 메모리 누수를 방지하는 방법을 알아보자!

Weak

Weak를 사용하여 강한 참조가 아닌 약한 참조를 만들어 메모리 누수를 방지할 수 있다!

class TestClass{
    weak var testClass: TestClass? = nil  // 약한 참조
    init(){
        print("init")
    }
    deinit(){
        print("deinit")
    }
}

var testClass1: TestClass? = TestClass()
var testClass2: TestClass? = TestClass()

testClass1?.testClass = testClass2
testClass2?.testClass = testClass1

testClass1 = nil
testClass2 = nil

이렇게 약한 참조만 남아있다면 객체들의 메모리는 해제된다.
즉 약한 참조는 참조는 할 수 있지만, Reference Count는 증가하지 않는다.

weak는 객체의 메모리가 해제된 후 그에 대응하는 변수는 자동으로 nil이 된다.
그러므로 모든 weak 참조 변수는 반드시 optional 타입이어야한다.

Unowned

Unowned는 weak랑 매우 유사하지만 nil이 될 수 없습니다.
따라서 Unowned 변수는 Optional로 선언되어서는 안됩니다.

weak 사용하는 것이 보다 안전하긴 하다.
하지만 변수가 weak가 되기를 원하지않고 해당 변수가 가리키는 객체의 메모리가 해제된 이후에는 해당 영역을 가리키지 않는다는 확신이 있다면 Unowned를 사용하자!

 

참고 - https://www.thomashanning.com/retain-cycles-weak-unowned-swift/

'iOS > 기초 지식' 카테고리의 다른 글

이미지 색 변경하는 법 - UIImage RenderingMode  (0) 2023.10.18
어..어어..!! 순환참조!  (2) 2023.10.17
Sync, Async - 동기, 비동기  (1) 2023.10.17
Protocol?  (2) 2023.10.17