2010-07-23 95 views
3

我有一個NSInputStream和一個連接到服務器的iphone應用程序的NSOutputStream。我能夠讀寫數據到套接字而沒有問題。問題是我有一個斷開連接按鈕,當我嘗試關閉任一個流時,它會掛起應用程序。我在猜測,我正試圖在錯誤的時間致電,但我不確定合適的時間。NSStream掛起關閉

回答

1

您必須確保您告訴底層爲您關閉本地套接字。下面是從我的應用程序之一一些代碼,並聯網:

... 
CFReadStreamRef readStreamRef; 
CFWriteStreamRef writeStreamRef; 

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)host, port, &readStreamRef, &writeStreamRef); 

if (readStreamRef && writeStreamRef) 
{ 
    CFReadStreamSetProperty(readStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); 
    CFWriteStreamSetProperty(writeStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); 

    inputStream = (NSInputStream*)readStreamRef; 
    outputStream = (NSOutputStream*)writeStreamRef; 
    ... 
2

最有可能你接受他們以後沒有挽留你的輸入和輸出流:)我有完全相同的問題,但非常貴多少時間找到解決方案:)

+0

這應該是評論不是答案... – 2012-11-23 04:54:44

0

保留NSOutputStream解決了我的問題,希望對別人有所幫助。示例代碼使用ARC編寫,因此它們不需要保留,但是如果您不使用ARC,則必須保留。

NSOutputStream *outputStream = (NSOutputStream *)CFBridgingRelease(writeStream); 
**[outputStream retain];** 
[outputStream setDelegate:self]; 
[outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] 
           forMode:NSDefaultRunLoopMode]; 
[outputStream open];