Мне было интересно, как лучше всего перенаправить 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.