0

非常に大量の出力を生成する NSTask 経由でコマンドを実行しています。標準出力に接続されたパイプを作成し、waitForDataInBackgroundAndNotify を使用して availableData でデータを消費しています。ただし、アプリによって割り当てられたメモリが継続的に増加するため、すべての出力がバッファリングされているようです。stdout に送信されるデータを消去/消費するにはどうすればよいですか? 私が使用しているコードは次のとおりです。

- (void)runCommand:(NSString *)commandToRun
{
    self.task = [[NSTask alloc] init];
    [self.task setLaunchPath: @"/bin/sh"];
    NSArray *arguments = [NSArray arrayWithObjects:
                          @"-c" ,
                          [NSString stringWithFormat:@"%@", commandToRun],
                          nil];
    [self.task setArguments: arguments];
    NSPipe *pipe = [NSPipe pipe];
    [self.task setStandardOutput:pipe];
    NSFileHandle *fh = [pipe fileHandleForReading];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedData:) name:NSFileHandleDataAvailableNotification object:fh];
    [fh waitForDataInBackgroundAndNotify];
    [self.task launch];
}

- (void)receivedData:(NSNotification *)notification
{
    NSFileHandle *fh = [notification object];
    NSData *data = [fh availableData];
    // do stuff...
    [fh waitForDataInBackgroundAndNotify];
}
4

0 に答える 0