You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
인스턴스의 주소값이 변수에 할당될 때 참조 카운트가 증가하면 강한 참조(strong)을 의미합니다.
기본적으로 생성되는 클래스 인스턴스는 별도의 키워드를 붙이지 않아도 default로 strong으로 생성되어 참조 카운트(RC)가 증가합니다. 이렇게 강한 참조를 통해 참조 카운트(RC)가 증가한 후 순환참조가 발생하여 영구적으로 메모리가 해제되지 않는 경우 메모리 누수 문제를 겪을 수 있기 때문에 주의해야 합니다.
weak
강한 참조를 통한 순한 참조 문제를 해결하기 위해서 weak와 unowned 키워드를 사용할 수 있습니다.
weak는 약한 참조라 부르며, 강한 참조와 달리 인스턴스를 참조하여도 참조 카운트(RC)를 증가시키지 않습니다. 참조하던 인스턴스가 메모리에서 해제되는 경우 자동으로 nil이 할당되어 메모리가 해제됩니다.
unowned
unowned는 미소유참조라 불리며, weak와 마찬가지로 강한 순환 참조 문제를 해결할 수 있고 참조 카운트(RC)를 증가시키지 않습니다. weak와의 차이점은 nil이 될 수 없기 때문에 참조하는 인스턴스가 메모리에서 사라질 일이 없다고 확신하는 경우에 사용합니다.
만약 unowned로 선언된 변수가 메모리에서 먼저 해제된 후 접근하면 해당 주소의 인스턴스가 이미 사라진 뒤기 때문에 에러를 발생시키게 됩니다.
따라서 weak와 반대로 수명이 더 긴 인스턴스를 unowned 미소유 참조로 선언해야합니다.
strong, weak, unowned 키워드는 Swift에서 참조 방식을 나타내는 키워드입니다.
strong은 기본적인 참조 방식으로 참조가 이뤄지면 참조 카운트가 1 증가합니다. 참조 카운트가 0이 되면 메모리에서 해제됩니다. 다만 두 객체가 서로를 강한 참조를 하게 되면 순환참조가 발생할 수 있습니다.
weak는 참조 카운트를 증가시키지 않는 참조 방식입니다. 참조 카운트를 증가 시키지 않기 때문에 순환참조 문제가 생기지 않습니다. 약한 참조는 객체가 메모리에서 해제될 경우 자동으로 nil을 할당합니다. 그렇기 때문에 weak 키워드를 적용시킨 객체는 옵셔널 타입이어야합니다.
unowned도 weak처럼 참조 카운트를 증가시키지 않는 참조 방식입니다. weak과 다른 점은 메모리 해제될 때 nil을 할당하는 것이 아니라 runtime crash가 발생합니다. 그래서 참조 대상이 메모리에서 해제되지 않는 것이 확실할 경우 사용하게 됩니다.
The text was updated successfully, but these errors were encountered: