在iOS 5中创建和使用流

在iOS 5中创建和使用流,ios,json,Ios,Json,请容忍我,我是个新程序员。(我说的话可能没有道理) 我正在尝试创建一个inputStream和outPut流,这样我就可以在类的其他地方使用JSON对象对其进行写入 我想知道我是否做对了。目前,我正在-(id)init{}中打开流 我的问题是:这是处理这种事情的正确方法吗?我应该在别处声明NSInputStream和NSOutputStream吗 为什么我必须将CFStreams转换为NSStreams?经过一些测试,这是创建流的正确方法。 CFStreams被强制转换为NSStreams,因为

请容忍我,我是个新程序员。(我说的话可能没有道理)

我正在尝试创建一个inputStream和outPut流,这样我就可以在类的其他地方使用JSON对象对其进行写入

我想知道我是否做对了。目前,我正在-(id)init{}中打开流

我的问题是:这是处理这种事情的正确方法吗?我应该在别处声明NSInputStream和NSOutputStream吗


为什么我必须将CFStreams转换为NSStreams?

经过一些测试,这是创建流的正确方法。 CFStreams被强制转换为NSStreams,因为NSStreams是obj-c本机的,在使用中提供了更多的选项和灵活性。NSStream实际上基于CFStream(它是BSD套接字上的包装器)


据我所知,这段代码应该始终异步运行,否则在运行时会出现挂起。

因为
CFStream
s是C类型,而
NSStream
s是Objective-C类型。如果您想在核心基础上使用C API,用于<代码> CFStudio,请继续使用。但是不要期望在
CFStream
@Linuxios上使用
NSStream
方法,因为它们是免费桥接的。看:。@idz:我知道。但是要使用无工具桥接,您仍然需要使用
(\uu bridge NSThing)一些东西
语法来强制转换它。@Linuxios,好的,这在您的评论中不是很清楚(例如,您没有提到强制转换,并且“不要期望在
CFStream
上使用
NSStream
方法”可能意味着它不起作用)@idz:谢谢你告诉我。您不能直接在
CFStream
上使用
NSStream
方法。这就是全部。
 -(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;
 }