나는 항상 실행되고 그의 큐에있는 모든 것을 처리하는 OS X 응용 프로그램을 만들고 있습니다. 이 작업은 프로세스를 표준 출력에 기록합니다. 백그라운드 스레드에서 실행되는 while 루프를 사용하여이 정보를 표준 출력에서 실시간으로 가져 오려고합니다. 문제는 12 시간이 지난 후 메모리 사용량이 25MB에서 750MB 이상으로 증가한 것입니다. 응용 프로그램은 ARC를 사용하므로 여기서 약간 잃어 버렸습니다. 누구든지 어떤 단서를 해결하는 방법? NSFilehandle에서 메모리 누출 문제를 해결하는 방법
NSFileHandle *fileStd = [stdPipe fileHandleForReading];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: cmd];
[task setArguments: arguments];
NSPipe *stdPipe = [NSPipe pipe];
NSPipe *errPipe = [NSPipe pipe];
[task setStandardOutput: stdPipe];
[task setStandardError: errPipe];
NSFileHandle *fileStd = [stdPipe fileHandleForReading];
[task launch];
NSData *readData;
NSString *logString;
while ((readData = [fileStd availableData]) && [readData length]){
logString = [[NSString alloc] initWithData: readData encoding: NSUTF8StringEncoding];
[self parseLog:logString];
}
readData = nil;
}
[task waitUntilExit];
그리고 parseLog 방법 :
+ (void) parseLog:(NSString *)output {
NSArray *chunks = [output componentsSeparatedByString: @"\r"];
NSString *lastLine = [chunks lastObject];
[lastLine writeToFile:@"/tmp/status.log" atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSRange textRange = [lastLine rangeOfString:@"<TEST> "];
if(textRange.location != NSNotFound) {
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setObject:lastLine forKey:@"test"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"handleNotification" object:nil userInfo:info];
}
}
당신이 사용하는 엑스 코드를 시도해 봤어을 누수를 탐지하는 도구? – Fonix
예 내가 한 일과 이것이 끝난 곳입니다. 나는 며칠 동안 붙어서 다른 모든 것을 시도했다. –