Как сделать перенаправление NSOutputStream на стандартный вывод?

Мне было интересно, как лучше всего сделать NSOutputStream перенаправить на стандартный вывод . Техника, которую я использую прямо сейчас, заключается в использовании потока вывода, который записывает в память, получает данные и выводит их на стандартный вывод:

  NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];
  [stream open];
  // calls to stream's -write:maxLengh:
  NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
  NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  printf("%s", [string UTF8String]);
  [stream close];

Есть ли лучший способ добиться этого? В частности, в этом подходе меня не устраивают две вещи:

  1. Необходимость дополнительной памяти для данных, которые записываются в поток

  2. Этот поток нельзя повторно использовать - после того, как я получил данные из этого потока через [stream propertyForKey: NSStreamDataWrittenToMemoryStreamKey] , поток не «сбрасывается», т.е. я хочу, чтобы последующие вызовы этого метода давали мне только новые данные, но это не так. Это означает, что мне нужно создавать новый NSOutputStream каждый раз, когда я пишу в stdout.

9
задан Chaitanya Gupta 14 August 2011 в 18:50
поделиться