サーバーに接続されているiPhoneアプリにNSInputStreamとNSOutputStreamがあります。問題なくソケットにデータを読み書きできます。問題は、切断ボタンがあり、いずれかのストリームで close を呼び出そうとすると、アプリがハングすることです。私は間違った時間にクローズしようとしていると推測していますが、正しい時間がわかりません。
1435 次
3 に答える
2
ほとんどの場合、入力ストリームと出力ストリームを受信した後に保持していませんでした:)まったく同じ問題がありましたが、解決策を見つけるのに多くの時間がかかりました:)
于 2011-05-03T13:34:33.637 に答える
1
基になるレイヤーにネイティブソケットを閉じるように指示していることを確認する必要があります。ネットワーキングを行う私のアプリの 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;
...
于 2010-07-23T16:00:30.883 に答える
0
NSOutputStream を保持することで私の問題は解決します。他の人に役立つことを願っています。サンプルコードは ARC で書かれているので、もう保持する必要はありませんが、ARC を使用しない場合は、保持する必要があります。
NSOutputStream *outputStream = (NSOutputStream *)CFBridgingRelease(writeStream);
**[outputStream retain];**
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[outputStream open];
于 2012-12-05T08:57:33.667 に答える