0

我慢してください、私は新しいプログラマーです。(私が言うことは意味をなさないかもしれません)

クラスの他の場所でJSONオブジェクトを使用して書き込むことができるように、inputStreamおよびoutPutストリームを作成しようとしています...

私はそれを正しくやっているかどうか知りたかった。現在、-(id)init{}でストリームを開いています

 -(id)init{
_isNetworkAvailable = FALSE;
//kCFAllocatorDefault is the same thing as Null
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)requestURL, port, &readStream, &writeStream);

NSInputStream *inputStream = (__bridge NSInputStream *)readStream;
NSOutputStream *outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
//There should really be some checking going on here, but we're going to forget it for now
//Call some checking method
_isNetworkAvailable = TRUE;

return self;
 }

私の質問は:これはこのようなものを処理する正しい方法ですか?NSInputStreamとNSOutputStreamを他の場所で宣言する必要がありますか?

CFStreamsをNSStreamsとしてキャストする必要があるのはなぜですか?

4

1 に答える 1

0

いくつかのテストでは、これがストリームを作成する適切な方法でした。NSStreamsはobj-cネイティブであり、使用することでより多くのオプションと柔軟性を提供するため、CFStreamsはNSStreamsにキャストされます。NSStreamは、実際にはCFStream(BSDソケットのラッパー)に基づいています。

このコードは、私が知る限り、常に非同期で実行する必要があります。そうしないと、実行時にハングすることがあります。

于 2012-08-16T04:01:07.330 に答える