내 질문은 NSObject
파생 된 개체에 대한 보유 개수를 구현하는 Foundation의 현재 버전 (또는 Objective-C 런타임 라이브러리가 여기에있는 것 같기 때문에)입니다. 내가 NSObject.mm에서 볼 수 있듯이 NSObject
의 인터페이스 본문에 retain count
이라는 이바가 없습니다. 대신, 각 개체에 대한 참조 카운터를 포함하는 일종의 테이블 또는 맵이있는 것으로 보입니다. 그러나 보유 카운트가 실제로지도로 수행 된 경우 및 release
연산이 너무 비싸지 않으므로 (이 경우에는 뮤텍스를 잠그고 잠금 해제해야하며,지도를 찾아 올바른 객체를 찾으십시오. 다중 스레드 환경에서 한 번에 하나의 객체 만 유지/해제 될 수 있다는 사실)?보유 수는 NSObject에서 어떻게 구현됩니까?
나는 새로운 객체를 할당 할 때, 어느 쪽도 ([NSObject alloc]
에 의해 호출되는 함수를 것 같다) NSObject.mm에서 _objc_rootAllocWithZone
에서 1로 유지 카운터를 설정 관련 내용을 찾지 못 하셨나요 objc-runtime-new.mm에서 _class_createInstanceFromZone
(즉, 도착에 나중에 _objc_rootAllocWithZone
에 의해 호출 됨).
- (NSUInteger) retainCount {return rand()}; – CodaFi
오, 세상에, 나는 종말을 잘못 놓았다; ... 나는 오늘 밤 자지 않을 것이다. – CodaFi