ARC 순환참조 관리법

Donghee Lee·2022년 9월 23일
0

iOS-Swift

목록 보기
18/20
post-thumbnail

최근 기술면접을 봤다.

알고 있는 내용이었는데, 너무 떨려서 미소유 참조에 대해 대답을 못했다.

다시 한 번 정리해두고자...


weak & strong의 차이점을 설명해주세요.

weak 약한 참조

	- 해당 인스턴스의 소유권을 갖지 않고, 주소값만을 가지는 포인터 개념
	- 자신이 참조하는 인스턴스의 retain count를 증가시키지 않으며, release도 발생하지 않음
	- 메모리가 해제될 경우 자동으로 레퍼런스가 nil로 초기화 시켜 줌
	- weak 속성을 사용하는 객체는 항상 optional 타입이어야 함(해당 객체가 nil 일 수 있기 때문)

strong 강한 참조

	- 해당 인스턴스의 소유권을 가짐
	- 자신이 참조하는 인스턴스의 retain count를 증가시킴
	- 값 지정 시점에 retain 되고, 참조가 종료되는 시점에 release 됨
	- 선언할 때 아무것도 적어주지 않으면 default로 strong 됨

unowned 미소유 참조 / 약한 참조

	- 해당 인스턴스의 소유권을 갖지 않음
	- 자신이 참조하는 인스턴스의 retain count를 증가시키지 않음
	- nil이 될 수 없다. optional로 선언되어서는 안됨

weak & unowned의 차이

	- weak는 객체를 계속 추적하면서 객체가 사라지게 되면 nil로 바꾼다
	- 하지만 unowned는 객체가 사라지게 되면 댕글링 포인터가 남는다
	- 이 댕글링 포인터를 참조하게 되면 충돌이 나는데, 
        이 때문에 unowned는 사라지지 않을거라고 보장되는 객체에만 설정해야 함!!
	- 댕글링 포인터 - 원래 바라보던 객체가 메모리에서 해제되면서 할당되지 않는 공간을 바라보는 포인터
profile
Better than Yesterday

0개의 댓글