2010-08-03 43 views
0

NSStreamDelegate一個新的操作系統非正式協議是在以前的OS定義爲(NSObject的)NSStreamDelegate 在最新的OS它被定義爲ID使用舊OS類別,並在相同的代碼庫

都具有相同的功能。

如果我想編寫運行時系統識別的代碼。我如何創建一個既不兼容又不兼容的對象?我夢想那真正的通用應用程序。

如果(catchOS10.5_or_iOS3.2){ [MyStream setDelegate:MyObj中] }否則{ [MyStream setDelegate:myObjWithProtocol] }

我有myHandlerClass這在新的操作系統是 MyClass的:NSObject的

因此,我的困惑。

有什麼建議嗎?

-A

回答

0

您是否真的難以在兩個版本上都能正常工作?這兩個想法基本相同。

你肯定是要申報的委託類作爲實施NSStreamDelegate協議(這是一個正式的協議,而不是非正式的,在當前的SDK):

@interface MyHandlerClass : NSObject <NSStreamDelegate> { 
    // ... 
} 
-(void)stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent; 
@end 

由於「ID」類型真的只是一個指向對象 - 對象的類型定義,你的指針指向您的代理類都將是一個id以及一個NSObject:

NSStream *myStream = [[NSStream alloc] init]; 
MyHandlerClass *del = [[MyHandlerClass alloc] init]; 
myStream.delegate = del; 

...應在兩個工作的SDK。或者,如果你在你的委託類的內部創建流(一種常見的成語),你會怎麼做:

NSStream *myStream = [[NSStream alloc] init]; 
myStream.delegate = self; 

到同一個快樂的結局。