1

NSObject에는 retainCount 인스턴스 변수가 없다는 것을 알고 있습니다. 실제로 수명 또는 참조 계산 환경과 관련된 인스턴스 변수가 없습니다. 따라서 내 질문은 NSObject (또는 해당 객체에 대한 객체)가 ivar없이 자체 참조 횟수를 추적하는 방법은 무엇입니까?NSObject의 참조 계산 시스템은 어떻게 작동합니까?

더 일반적으로 명시 적 참조 카운트 인스턴스 변수를 사용하지 않고 참조 계산 환경을 생성하기위한 다른 시스템은 무엇입니까?

답변

2

먼저 특정 구현이 변경 될 수 있으므로이를 절대 고려하면 안됩니다. 대부분의 경우 실제로는 관련이 없습니다.

어쨌든, 현재 구현은 관련 참조 카운트를 통해, 기본적으로 해시 테이블을 통해 참조 카운트에 객체 포인터를 해싱합니다.

+1

나는 그것에 의존하지 않고있다. 나는 애플이 어떻게 구현하는지 궁금해하고있다. – Ephemera

+0

외부 테이블을 사용하면 매우 중요한 비용이 발생합니다 (잠금 + 해시 조회 대 간단한 원자 추가). NSObject를 복사하는 것을 권장하지 않습니다. 즉, libobjc는 오픈 소스입니다. opensource.apple.com (프로젝트 이름은 objc4)에서 어떻게 작동하는지 읽을 수 있습니다. –

+0

@Catfish_Man 다른 방법으로 구현 한 경우 다른 성능 오버 헤드가 있어야한다고 생각했습니다. 포인터 주셔서 감사합니다, 나는 그 소스를 살펴 보면서 조금만있을 것 같습니다! – Ephemera