나는 ARC를 공부하고있다. 그리고 약 포인터를 제로에 대해. OK 모든 기능을 이해했습니다. 약한 참조의 의미는 GC 시스템의 약한 참조와 동일하지만 Objective-C는 GC (특별한 경우 제외)를 사용하지 않으므로이 작동 방식을 이해할 수 없습니다.ARC의 약한 포인터 비헤이비어 구현 방법은 무엇입니까?
저는 약간 복잡한 사람입니다. 따라서 기본 구현 주체가 사용할 기능을 받아 들일 필요가 있습니다. 그러나 문제는 zeroing-weak 포인터의 원리를 설명하는 문서를 찾기가 매우 어렵다는 것입니다. (
IMO,이 작업을 수행하는 유일한 방법은 런타임시 자체를 참조하는 모든 포인터를 추적하고 유지하는 것입니다. nil
그 참조 카운트가 0
가된다.하지만이 너무 무거운 바보 보이는 때. 내가 훨씬 더 나은 솔루션이 실제 ARC의 구현에 사용 믿습니다.
당신이 날은 문서를 찾을 수 있나요? 아니면 직접 설명을 더 좋은 것 도와 드릴까요!
사실, ARC에서 컴파일러는'objc_storeWeak' 및'objc_loadWeakRetain'과 같은 함수를 호출하는 코드를 내 보냅니다. 이 함수는 문서화 된 API입니다. http://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime –
예, 이러한 함수는 명시된 바와 같이 객체에 저장된 집합에서 weak 포인터를 추가하고 제거하는 방법입니다. "ARC는 객체가 새로운 약한 참조에 할당 될 때마다 그 세트에 대한 포인터를 추가하는 코드를 추가합니다"라고 말했을 때 –
약한 포인터가 0 인 시점에서 객체의 참조 카운트가 떨어지는 지 알고 있습니까? 0으로 설정되거나 할당 해제 된 경우? 나는 참조 된 객체가 다시 사용되는 "할당"포인터로 문제가 발생했지만 참조 카운트가 0 사이로 떨어 졌기 때문에 여전히 dealloc이 호출되었습니다. 제로 - 약한 포인터로 해결할 수 있을지 궁금합니다. – fishinear