2014-08-29 2 views
-1

ARC view in instrument아이폰 OS가 아닌 제로 기준 ARC의 수와

안녕 모두

를 할당 해제 할 수는 난의 ViewController ARC 모드를 할당 해제하려합니다. 그러나 RefCount는 항상 0이 아닙니다.

모든 객체를 nil로 설정하려고 시도했으며 모든 하위 뷰를 removeFromSuperview + nil로 설정하려고했습니다. 및 무효화 타이머 + nil; 여전히 카운터 = 2입니다.

어떤 포인터가 아직 보유 중인지 추적하는 방법이 있습니까?

감사합니다.

답변

2

블록을 사용하는 경우 해당 블록을 유지할 수도 있습니다. 예 : 블록은 객체에 의해 참조되며이 블록 안에는 객체에 대한 객체 또는 호출 인스턴스 메소드를 참조하고 있습니다. 보유 수를 0으로 떨어 뜨리지 않는 또 다른 옵션은 알림을 위해 관찰자로 abject를 등록한 것입니다. 사과 문서에서 강한 참조주기의 https://stackoverflow.com/a/12286739/2261423

예 : 조언을

self.block = ^{ 
     [self doSomething]; // capturing a strong reference to self 
           // creates a strong reference cycle 
    }; 
+0

예, 이것은 문제 일 가능성이 높습니다. 그 사이에 많은 블록을 만들었습니다 ... 어떤 블록이 컨트롤러를 보유하고 있는지 알아 보는 빠른 검색이 있습니까? – MobileDev

+0

그것은 당신이 당신을 참조하는 블록입니다. Apple docs에 잘 표시되어 있습니다. https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html 섹션 "자기 캡처시 강한 참조주기 피하기" self.block =^{ [self doSomething]; // 자체에 대한 강력한 참조를 캡처합니다. // 강력한 참조주기를 만듭니다. }; – tsr

+0

블록이있는주기가 있으면 컴파일러에서 경고를 표시합니다. – kelin

-1

@Billy 왜이 작업을 수행하고 있습니까? ARC를 사용할 때 할당 해제에 대해 걱정할 필요가 없습니다. 컨트롤러 ~ 컨트롤러가 없을 때 컨트롤러가 자동으로 할당 해제됩니다. 예,보기는 컨트롤러를 참조하지 않으며, 참조로 참조됩니다. 따라서 해당보기를 제거해도 컨트롤러의 유지 카운트은 에 영향을주지 않습니다. View Controller를 메모리에서 정말로 제거하려면 부모보기 컨트롤러에서 View Controller를 제거하고 모든 링크를 nill로 설정하십시오.

+0

감사

당신은 도움이 답을 찾을 수 있습니다. 메모리가 높게 유지되고 메모리를 비우려고하므로 dealloc에 ​​중단 점을 넣으려고 시도하며 호출되지 않습니다. 그것은 컨트롤러를 가리키는 "숨겨진"포인터가 있음을 의미합니다. 모든 것을 찾아내는 것은 매우 어렵습니다. – MobileDev