2012-01-21 2 views
5

저는 iOS 5 및 ARC를 처음 사용하므로 내 바보 같은 질문을 용서하십시오.ARC (Automatic Reference Counting)가 메모리 누수에 미치는 영향

우리 프로젝트에서 ARC를 사용한다면 메모리 누수가 전혀 없음을 의미합니까?

ARC를 사용할 경우 메모리 누수 및 NSZombies를 탐지하기 위해 Instruments를 사용할 필요가 있습니까?

+0

아니요, ARC는 메모리 누수를 완전히 없애지 않습니다. [Objective-C의 자동 참조 카운팅 (Xcode 4.2에서 어떤 종류의 누수가 방지/최소화되지 않는 것입니까?)] (http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-objective-cs)을 참조하십시오. -automatic-reference-xcode-4-2) – BoltClock

답변

5

ARC를 사용하면 특정 유형의 누출을 제거하는 데 도움이됩니다. 이는 또는 autorelease 개의 단일 개체를 잊지 않기 때문입니다. 예를 들어 다음 유형의 오류는 불가능합니다.

myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17]; 
// oops, just leaked that NSString! 

그러나 ARC는 유지주기로 인한 누출을 제거하지 않습니다. 약한 참조를 사용하거나주기가 누출되기 전에 수동으로 브레이크를 해제하여 보관주기를 제거하는 것은 귀하에게 달려 있습니다. 예를 들어 블록을 더 많이 사용하기 시작하면 블록/자체 유지 사이클이 훨씬 더 많이 보입니다. Transitioning to ARC Release Notes은 약한 참조를 사용하여 이러한주기를 피하는 방법에 대해 설명합니다.

+1

ARC를 이해하려면 [WWDC 2011] (https://developer.apple.com/videos/wwdc/2011/)의 "Automatic Reference Counting"비디오를 적극 권장합니다. –

+0

이 질문과 같은 상황에서 내가 할 수있는 일 http://stackoverflow.com/questions/21423309/memory-leak-in-nsstring-stringwithutf8string-with-arc-enabled – deltaaruna

0

아니요, 그렇다고해서 메모리 누수가 발생하지 않습니다. 참조 횟수가있는 런타임에서 어떤 일이 발생하는지에 따라 코드에서 매달린 참조를 남기고 객체가 해제되지 않는 경우가 있습니다. 좋은 코드를 작성하는 것은 당신에게 달려 있습니다.

+0

확인. 그러면 NSZombies에도 똑같은 것이 적용될 것입니까? – meetpd

0

우리 프로젝트에서 ARC를 사용하면 메모리 누수가 전혀 없음을 의미합니까?

누출이있을 수 있습니다 - 프로그램 및 라이브러리에 있습니다. 또한 ARC는 ObjC 객체에만 적용됩니다. objc 객체가 아닌 힙 할당은 쉽게 누출 될 수 있습니다 (예 : malloc/new).

ARC를 사용하면 메모리 누수 및 NSZombies를 탐지하기 위해 Instruments를 사용할 필요가 있습니까?

예. 이전 응답은 왜 귀하의 프로그램이 이러한 문제로부터 자유롭지 않을지를 자세히 설명해야합니다. 또한 바보 같은 일을하면 컴파일러가 잘못 처리 할 수 ​​있으며 데이터를 적절하게 보호하지 않으면 (예 : 동시 실행) 확실히 문제를 일으킬 수 있습니다.

관련 문제