Я провел последние несколько часов, пытаясь найти утечку памяти в моем коде. Вот оно:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
expression = [expression stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // expression is an NSString object.
NSArray *arguments = [NSArray arrayWithObjects:expression, [@"~/Desktop/file.txt" stringByExpandingTildeInPath], @"-n", @"--line-number", nil];
NSPipe *outPipe = [[NSPipe alloc] init];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/grep"];
[task setArguments:arguments];
[task setStandardOutput:outPipe];
[outPipe release];
[task launch];
NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
[task waitUntilExit];
[task release];
NSString *string = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
string = [string stringByReplacingOccurrencesOfString:@"\r" withString:@""];
int linesNum = 0;
NSMutableArray *possibleMatches = [[NSMutableArray alloc] init];
if ([string length] > 0) {
NSArray *lines = [string componentsSeparatedByString:@"\n"];
linesNum = [lines count];
for (int i = 0; i < [lines count]; i++) {
NSString *currentLine = [lines objectAtIndex:i];
NSArray *values = [currentLine componentsSeparatedByString:@"\t"];
if ([values count] == 20)
[possibleMatches addObject:currentLine];
}
}
[string release];
[pool release];
return [possibleMatches autorelease];
Я пытался следовать нескольким основным правилам управления памятью Какао, но каким-то образом все еще кажется утечка, я полагаю, что это утечка массива. Заметно, если возможно большие совпадения. Вы можете попробовать код, используя любой большой файл как "~ / Desktop / file.txt" и как выражение, которое дает много результатов при grep-ing.
Какую ошибку я совершаю?
Спасибо за любую помощь!
- Ry
РЕДАКТИРОВАТЬ: я просто использовал Clang Static Analyzer, чтобы найти утечки в моем коде, но он не находит. Он находит только мертвые инициализации, но они не могут быть ответственны за мои утечки ...