Мне было интересно, как лучше всего сделать 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];
Есть ли лучший способ добиться этого? В частности, в этом подходе меня не устраивают две вещи:
Необходимость дополнительной памяти для данных, которые записываются в поток
Этот поток нельзя повторно использовать - после того, как я получил данные из этого потока через [stream propertyForKey: NSStreamDataWrittenToMemoryStreamKey]
, поток не «сбрасывается», т.е. я хочу, чтобы последующие вызовы этого метода давали мне только новые данные, но это не так. Это означает, что мне нужно создавать новый NSOutputStream каждый раз, когда я пишу в stdout.