런타임에 iOS에서을 키의 객체 주소로 사용하고 그 객체의 보유 개수를 값으로 유지합니다 (Kazuki Sakamoto와 Tomohiko Furumoto가 작성한 책에서).런타임시 iOS 검사에서 카운트 테이블을 보유 할 때
아래처럼 :
key(object's addr) value(reference count)
0x7fff59a7ba88 2
0x7fa84b4b2c10 0
...
그리고 아이폰 OS 런타임이 일부 개체를 의미, 가치있는 모든 키가 0 인 있는지 확인하기 위해 테이블을 가끔를 확인할 것 공개해야한다, 다음 아이폰 OS는 키 - 값 쌍을 제거 할 것 테이블에서 호출하고 dealloc
으로 호출하여 개체의 메모리를 해제합니다.
이 이론이 맞다면, 제 질문은 언제 어떤 주파수 시스템이 reference count hashtable
을 검사 할 것인가라는 것입니다. 각 runloop
? 또는 iOS는 테이블을 전혀 확인하지 않지만 자동으로 완료됩니다.
UPDATE :
난 그냥 ARC 또는 MRC와는 아무 상관이 없어야합니다 내 설명을 수정, 그것은 런타임에 참조 카운팅에 대한 자세한 내용입니다.
ARC처럼 들리지는 않지만 자동 복구 풀처럼 들립니다. – rmaddy
@rmaddy 실제로 런타임시 ARC의 기본 메커니즘입니다. 그렇지 않으면 시스템이 각 객체의 보유 개수를 어떻게 추적합니까? 일부 데이터 구조의 어딘가에 보관 횟수를 저장하여 확인하고 작동 할 수 있어야합니다. 그것은 'ARC' 테이블을 사용하고 있지만 언제입니까? 그게 내 질문이다. – Boris
아니요 보유 수 추적은 ARC와는 아무런 관련이 없습니다. 객체는 ARC보다 오래 유지됩니다. ARC가 추가하는 유일한 것은 컴파일러에 의해'retain'과'release' 호출의 자동 삽입입니다. ARC 및 MRC 코드는 런타임에 동일합니다. 객체의 보유 개수가 0이되면 할당 해제됩니다 (ARC 또는 MRC). – rmaddy