2011-03-29 4 views
1

"checkFiles"메서드에서 방금 NSDocumentDirectory 경로를 검색하고 파일 목록을 요청했습니다.NSFileMananer의 contentsOfDirectoryAtPath 누설

- (void) checkFiles{ 
     NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *path = [pathList objectAtIndex:0]; 

     NSArray *dirArray = [myFileManager contentsOfDirectoryAtPath:path error:NULL]; // leak occurs here! 

     /* .... */ 
} 

-

-

누수 인스트루먼트는 NSFileManager를의 contentsOfDirectoryAtPath 방법에 누수를 감지합니다.

Instruments에서 NSCFString이라는 누출 된 개체를 클릭했을 때의 스택 추적입니다.

0 CoreFoundation __CFAllocatorSystemAllocate 
    1 CoreFoundation CFAllocatorAllocate 
    2 CoreFoundation _CFRuntimeCreateInstance 
    3 CoreFoundation __CFStringCreateImmutableFunnel3 
    4 CoreFoundation CFStringCreateWithBytes 
    5 Foundation -[NSFileManager directoryContentsAtPath:matchingExtension:options:keepExtension:error:] 
    6 Foundation -[NSFileManager contentsOfDirectoryAtPath:error:] 

파일 목록이 포함 된 내 UITableView를 업데이트하기 위해 "checkFiles"메서드를 자주 호출하기 때문에이 누수를 피할 수는 없습니다.

이러한 종류의 시스템 누출을 어떻게 해결해야합니까?

감사합니다.

답변

2

dirArray가 어딘가에 유지되지 않을 것이라고 확신하십니까? 아마도 다른 방법에 대한 논쟁으로 넘어갈 때와 같이 변장했을 것인가?

반자동 확인을 원하면 Instruments의 Leaks 도구를 사용하여 보내는 (직접 또는 간접적으로) 보내는 모든 보관/해제 메시지를 확인하고 각각을 확인하십시오.

+0

답변 해 주셔서 감사합니다. 실제 누출은 다른 장소에서 발생했지만 동일한 문자열 메모리 주소를 공유했습니다. 내가 한 [myArray addObject : [[dirArray objectAtIndex : 1] copy]] – pnmn

+0

당신이 유용하다는 것을 알게되어 다행입니다. –