-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
순환 참조는 언제 일어나며, 해결방법은 무엇인가요? #27
Comments
수명이 더 짧은 참조 인스턴스에게 약한 참조(weak)를 붙이거나, 수명이 더 긴 참조 인스턴스에 미소유 참조(unowned)를 붙이는 방식으로 이를 해결합니다. 약한 참조(weak)를 통해 수명이 짧은 인스턴스가 먼저 메모리에서 해제되더라도 자동으로 nil이 할당되어 에러를 막을 수 있습니다. 반면 미소유 참조(unowned)의 경우 먼저 메모리에서 해제되지 않는다는 것을 확신하고 사용하기 때문에 옵셔널로 사용되지 않으며 주의하며 사용해야합니다. 만약 미소유 참조(unowned) 키워드를 붙인 참조 인스턴스가 메모리에서 해제된 후 해당 인스턴스를 참조하게 되면 에러가 발생하기 때문에 수명이 더 긴 인스턴스를 확신하고 미소유 참조(unowned) 키워드를 사용해야 합니다.
|
순환 참조는 두 개 이상의 객체가 서로를 강한 참조로 참조하여 발생하는 문제입니다. 이러한 순환참조는 메모리 누수를 유발하여 메모리 사용 효율성을 저하시키게 됩니다. 순환 참조를 해결하기 위해서는 이러한 강한 참조 연결고리를 끊어주어야 됩니다. 대표적인 방법으로는 약한 참조로 변경하는 방식이 있습니다. 약한 참조를 사용하게 되면 참조 카운트를 증가시키지 않고, 참조 대상이 해제되면 자동으로 nil로 설정되기에 순환 참조로 인한 메모리 누수 문제를 쉽게 해결할 수 있습니다. |
순환 참조는 두 개의 객체가 서로 강한 참조를 하고 있을 때 일어납니다. 더 자세히 말하자면 ARC 시스템에서 강한 참조를 하게 되면 참조 카운트가 1이 증가하게 됩니다. 이 카운트는 참조 대상이 메모리에서 해제되면 줄어들게 되고 참조 카운트가 0이 되면 객체가 메모리에서 해제됩니다. 순환 참조를 해결하기 위한 방법으로는 강한 참조 대신 weak, unowned 참조를 사용하는 방법이 있습니다. 두 참조는 참조 카운트를 증가시키지 않아 상호 참조 상태에서도 정상적으로 메모리 해제가 가능합니다. |
The text was updated successfully, but these errors were encountered: