Daily iOS
메모리·ARC

Core Foundation 객체와 ARC

SecItemCopyMatching이나 CGImageSource 같은 C API 가 돌려주는 Core Foundation 객체를 Swift 에서 다룰 때, Unmanaged·takeRetainedValue()·takeUnretainedValue()는 언제 쓰나요? Create/Get 규칙과 연결해 설명해 주세요.

면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

Core Foundation은 함수 이름에 소유권 규칙을 담는다. Create나 Copy가 붙은 함수는 호출자가 소유하는 +1 값이라 takeRetainedValue()로 꺼내고, Get으로 얻은 +0 값은 takeUnretainedValue()로 꺼낸다. Unmanaged로 돌아온 값은 이 선택이 개발자 몫이고, 반대로 쓰면 누수 아니면 과해제 크래시다.

받은 질문 공유