객관적 c에 익숙하지 않아 어리석은 질문 인 경우 용서해주십시오. 디렉토리에있는 파일 목록을 파싱하는 배경 스레드를 만들었습니다. 디렉토리의 파일은 언제든지 바뀔 수 있습니다.iOS - contentsOfDirectoryAtPath를 호출하면 루프에서 메모리가 누수됩니다.
루프의 반복마다 "contentsOfDirectoryAtPath"를 호출하고 갑자기 300MB 이상 할당됩니다. ARC에서 반환 된 배열을 해제하는 방법을 알 수 없습니다. 누군가가 나를 올바른 방향으로 향하게 할 수 있습니까?
-(void) offlineModeThread
{
NSString *dataDir = [ViewController getDataDirectory];
NSFileManager *nfm = [NSFileManager defaultManager];
while(1)
{
NSArray *files = [nfm contentsOfDirectoryAtPath:dataDir error:nil];
/*
if(files == nil)
break;
if([files count] <= 0)
{
files = nil;
[NSThread sleepForTimeInterval: 5.0f];
continue;
}
if(![ViewController obtainLock])
{
files = nil;
continue;
}
*/
//[ViewController releaseLock];
files = nil;
}
}
'파일'을 nil로 설정하여 배열을 릴리스하려고 시도했지만 작동하지 않습니다.
ARC 프로젝트를 사용합니까? – Joey
참고 사항 : [NSFileManager defaultManager]는 스레드로부터 안전하지 않으므로 대신 [[NSFileManager alloc] init]을 사용하십시오. – San
@ 샌프란 [설명서] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsfilemanager_Class/Reference/Reference.html#//apple_ref/doc/uid)를 읽었을 것입니다./20000305-SW19)와 같은 주장을하기 전에. – CodaFi