2012-09-19 3 views
1

내 질문은 기본적으로 제목입니다. Automatic Reference Counting이 설정된 XCode에서 수동으로 메모리를 관리해야합니까? release, retain, 등등 같이?ARC를 사용하면 수동으로 메모리를 관리해야합니까?

감사합니다.

+0

ARC에서는 메모리를 해제하는 것에 대해 걱정할 필요가 없습니다.하지만 객체를 사용할 때 해제되지 않는다는 것을 알고 있어야합니다. –

+0

@Prince : 개체가 언제 공개 되나요? – Surfbutler

+0

@Surfbutler 미래의 임의의 지점에서. 그것은 결정 론적 일 것이지만 당신의 문법으로부터 명시 적이지는 않을 것입니다, 당신은 암시 적으로 상위 수명 한계를 제공 할 것입니다. 그래서 Guard Malloc과 좀비 같은 것들은 문제를 확실하게 잡아서 성능을 예측할 수 있어야하지만, 릴리스가 발생할 때를 가정하는 코드를 작성하는 것은 나쁜 생각입니다.하지만 항상 여러 가지 이유로 나쁜 생각이었습니다. 어떤 일을 멈출 때 누군가에게 명시 적으로 말할 필요가 있다면'invalidate'-type 단계로'NSTimer' 패턴을 따르십시오. – Tommy

답변

5

ARC는 Objective-C 개체 만 처리합니다. 따라서 Core Foundation 및 일반 C 메모리를 수동으로 관리해야합니다.

수동으로 유지 또는 해제 할 필요는 없지만 보유주기를 계속 유지하는 역할을 담당하고 있으므로 적절한 속성을 강력하고 약하게 표시 할 수 있습니다. 따라서 적어도 소유권 측면을 계속 고려할 필요가 있습니다.

그 외에도 적어도 하나의 매우 구체적인 버크가 있습니다. 스택이 스택 아래에서 풀리려면 블록을 복사해야합니다. 스택이 아니라 힙을 차지하도록 보장하여 메모리 관리와 관련이 있습니다.

+0

블록을 속성에 할당하거나 함수에서 반환하는 경우와 같이 블록은 자동으로 복사되지만 상황에 의존하지는 않습니다. –

+0

다른 블록에 의해 캡처되었을 때 복사 된 것으로 생각되기 때문에 99 %의 실제 사용 사례가 포함되어 있지만 아직 인용 가능한 참조를 찾지 못했습니다. 하나의 객체를'performSelector : ... afterDelay :'에 전달하는 것은 안전 할 것입니다. – Tommy

+0

아니요, 다른 함수에 객체로 블록을 임의로 전달하는 것은 안전하지 않으며, 이유를 설명해 드리겠습니다 : 블록은 객체를 이미 복사 한 함수 (예 : 속성)에 전달 될 때 자동으로 복사되지만, 정상적인 대상처럼 유지됩니다. 그래서 블록에 힙이 없다면 아무 의미가없는 한 블록에 대한 '강력한'참조가있을 수 있습니다. ARC는'copy'와'retain' (블록이 이미 복사되었을 때만 작동합니다)을 사용하기를 원하지 않기 때문에 임의의 타입 ('id')에 할당 할 때 블록이 복사되지 않습니다. 블록은 매우 혼란 스럽습니다. –

관련 문제