У вас действительно есть проблемы, чтобы заставить это работать на обеих версиях? Две идеи в основном одинаковы.
Вам определенно придется объявить свой класс делегата как реализующий протокол NSStreamDelegate (который является формальным, а не неофициальным протоколом в текущем SDK):
@interface MyHandlerClass : NSObject <NSStreamDelegate> {
// ...
}
-(void)stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent;
@end
Так как тип "id" действительно является просто typedef для указателя на объект Obj-C, ваш указатель на ваш класс делегата будет как id, так и NSObject:
NSStream *myStream = [[NSStream alloc] init];
MyHandlerClass *del = [[MyHandlerClass alloc] init];
myStream.delegate = del;
... должен работать на обоих SDK. Или, если вы создаете свой поток внутри вашего класса делегата (обычная идиома), вы должны сделать:
NSStream *myStream = [[NSStream alloc] init];
myStream.delegate = self;
к тому же счастливому концу.