2011-10-13 4 views
-1

iOS 최종 버전 Apple에서는 Objective-C 용 자동 참조 계산 기능을 구현했지만 작동으로 이해하지 못합니다.자동 참조 횟수가 가비지 수집기로 작동합니까?

+1

[문서보기] (http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html)를 사용해 보셨습니까? 또는 [다른 문서] (http://www.google.com/url?sa=t&source=web&cd=1&ved=0CCQQFjAA&url=http%3A%2F%2Fclang.llvm.org%2Fdocs%2FAutomaticReferenceCounting.html&ei=1iaXTriaLcnPiALP_azDDQ&usg=AFQjCNHBcQAROrz81zpnzFhm8tW7ApG47g)? –

+0

또는 여기를 검색하는 방법은 무엇입니까? http://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work –

+0

도움을 주셔서 감사합니다. 여러 페이지의 문서를 읽지 않고도 명확한 정보를 얻을 수 있습니다. 그렇지 않으면 stackoverflow에 질문 할 이유가 없습니다 ... – ADIMO

답변

12

자동 참조 횟수는 정상 표기 규칙에 따라, 컴파일 시간에 당신을 위해 코드에 retainrelease 메시지를 삽입합니다. 컴파일러가 당신을 위해 그 비트를 작성할 수있을 정도로 똑똑하고 실수를 할 가능성이 훨씬 적은 것을 제외하고는 직접 메모리 관리를 수동으로 수행 한 것과 같습니다.

가비지 수집이 아니기 때문에 (매우 간단한) 정적 분석과 비슷합니다. 또한 Catfish_Man에 의해 제기 된주의 사항에 따라 여전히 압도적으로 결정론적인 메모리 관리와 런타임 비용의 전반적인 변화는 거의 없습니다.

+3

런타임 비용의 변경은 정확하지 않습니다. 컴파일러는 객체 수명에 대해 인간보다 훨씬 보수적이어야하며, 일반적으로 refcount 변동폭이 약 20 % 더 커집니다. 반면에 ARC는 많은 경우에 자동 리사이징을 피하기 위해 수행하는 간단한 트릭을 가지고있어 메모리 사용을 줄이고 성능을 향상시킬 수 있습니다. 성과가 있는지 여부는 문제의 정확한 코드에 달려 있습니다. –

+0

좋은 지적. 나는 내 대답을 토닝했고 당신의 코멘트에 대한 명백한 언급을했다. – Tommy

+0

@ 토미 : "100 % 결정적"이라고 말하면서 "ARC는 전체 계산 내역을 변경하는 방식으로 작업 순서를 변경하고 제거 할 수 있습니다"라고 말합니다. http://clang.llvm.org/docs/AutomaticReferenceCounting.html#optimization –

1

자동 참조 계산은 Objective-C 객체 및 블록에 대한 자동 메모리 관리를 구현하므로 프로그래머가 명시 적으로 유지 및 릴리스를 삽입 할 필요가 없습니다. 사이클 수집기를 제공하지 않습니다. 사용자는 명시 적으로 수명을 관리해야합니다.

이 사양 읽기 - Automatic Reference Counting

관련 문제