2016-11-21 3 views
0

참조 횟수가 0 일 때 즉시 객체의 할당이 해제되거나 dealloc이 발생하도록 명시 적으로 해제 메소드 (ARC의 컴파일러에 의해 자동으로 삽입 됨)가 나타날 때까지 대기합니까?참조 횟수, ARC

+1

레퍼런스 카운트가 0이되도록 'release'를 호출합니다. – rmaddy

+0

레퍼런스 카운트가 0이되었다고 생각하는 것은 실수입니다. 런타임의 현재 구현은 count_가 0이 될 때'dealloc'을 호출하지만 실제로 0으로 감소시키지 않습니다. 이것은 실질적으로 동일하지만 근본적인 행동을 파고 들기 위해 혼란 스러울 수 있습니다. – Avi

답변

1

메모리 관리와 관련된 모든 문제는 개체를 확보 할 수있는 단일 장소가있는 대규모 프로그램을 만드는 것이 어렵다는 것입니다. 이 경우, 참조 카운팅을 전혀 할 필요가 없습니다!

참조가 작성되거나 삭제 될 때마다 컴파일러에서 retainrelease을 호출합니다. release이 호출되면 참조 횟수가 감소합니다. 이렇게하면 카운트가 0에 도달하면 deinit이 호출되고 객체의 메모리가 해제됩니다. 이것은 모두 release 호출의 일부입니다.