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