내 질문은 기본적으로 제목입니다. Automatic Reference Counting이 설정된 XCode에서 수동으로 메모리를 관리해야합니까? release, retain, 등등 같이?ARC를 사용하면 수동으로 메모리를 관리해야합니까?
감사합니다.
내 질문은 기본적으로 제목입니다. Automatic Reference Counting이 설정된 XCode에서 수동으로 메모리를 관리해야합니까? release, retain, 등등 같이?ARC를 사용하면 수동으로 메모리를 관리해야합니까?
감사합니다.
ARC는 Objective-C 개체 만 처리합니다. 따라서 Core Foundation 및 일반 C 메모리를 수동으로 관리해야합니다.
수동으로 유지 또는 해제 할 필요는 없지만 보유주기를 계속 유지하는 역할을 담당하고 있으므로 적절한 속성을 강력하고 약하게 표시 할 수 있습니다. 따라서 적어도 소유권 측면을 계속 고려할 필요가 있습니다.
그 외에도 적어도 하나의 매우 구체적인 버크가 있습니다. 스택이 스택 아래에서 풀리려면 블록을 복사해야합니다. 스택이 아니라 힙을 차지하도록 보장하여 메모리 관리와 관련이 있습니다.
블록을 속성에 할당하거나 함수에서 반환하는 경우와 같이 블록은 자동으로 복사되지만 상황에 의존하지는 않습니다. –
다른 블록에 의해 캡처되었을 때 복사 된 것으로 생각되기 때문에 99 %의 실제 사용 사례가 포함되어 있지만 아직 인용 가능한 참조를 찾지 못했습니다. 하나의 객체를'performSelector : ... afterDelay :'에 전달하는 것은 안전 할 것입니다. – Tommy
아니요, 다른 함수에 객체로 블록을 임의로 전달하는 것은 안전하지 않으며, 이유를 설명해 드리겠습니다 : 블록은 객체를 이미 복사 한 함수 (예 : 속성)에 전달 될 때 자동으로 복사되지만, 정상적인 대상처럼 유지됩니다. 그래서 블록에 힙이 없다면 아무 의미가없는 한 블록에 대한 '강력한'참조가있을 수 있습니다. ARC는'copy'와'retain' (블록이 이미 복사되었을 때만 작동합니다)을 사용하기를 원하지 않기 때문에 임의의 타입 ('id')에 할당 할 때 블록이 복사되지 않습니다. 블록은 매우 혼란 스럽습니다. –
ARC에서는 메모리를 해제하는 것에 대해 걱정할 필요가 없습니다.하지만 객체를 사용할 때 해제되지 않는다는 것을 알고 있어야합니다. –
@Prince : 개체가 언제 공개 되나요? – Surfbutler
@Surfbutler 미래의 임의의 지점에서. 그것은 결정 론적 일 것이지만 당신의 문법으로부터 명시 적이지는 않을 것입니다, 당신은 암시 적으로 상위 수명 한계를 제공 할 것입니다. 그래서 Guard Malloc과 좀비 같은 것들은 문제를 확실하게 잡아서 성능을 예측할 수 있어야하지만, 릴리스가 발생할 때를 가정하는 코드를 작성하는 것은 나쁜 생각입니다.하지만 항상 여러 가지 이유로 나쁜 생각이었습니다. 어떤 일을 멈출 때 누군가에게 명시 적으로 말할 필요가 있다면'invalidate'-type 단계로'NSTimer' 패턴을 따르십시오. – Tommy