首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFReadStreamRef诉NSInputStream *

CFReadStreamRef诉NSInputStream *
EN

Stack Overflow用户
提问于 2012-05-15 12:27:06
回答 1查看 4.2K关注 0票数 1

NSInputStream *CFReadStreamRef的区别似乎在于,第一个对象是目标C对象,而第二个对象是本机结构。然而,他们是免费的桥梁。

我想实现一个基于网络流的程序。

  • [ getStreamsToHost:port:inputStream:outputStream:] NSStream]生产NSInputStream *NSOutputStream *。但是,在iOS上,此方法不可用。 因此,CFStreamCreatePairWithSocketToHost必须在iOS上使用。 CFReadStreamRef readStream;CFWriteStreamRef writeStream;CFStreamCreatePairWithSocketToHost( kCFAllocatorDefault,host,port,&readStream,&writeStream);NSInputStream *read = (__bridge NSInputStream *)readStream;NSOutputStream *read= (__bridge NSOutputStream *)writeStream;
  • 设置流属性时,使用NSInputStream *时并非所有属性都可用。特别是当相应的流关闭时,确保套接字也被关闭是非常有趣的。 是否必须将NSInputStream *转换为CFReadStreamRef以设置此属性,然后还原转换,以设置此属性?
  • ..。

NSInputStream *似乎有多个缺点。它唯一的优势是我可以提供它自己的子类,而在CFReadStreamRef情况下却不能这样做吗?什么时候应该使用哪种方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-15 15:41:05

一般来说,大多数基金会/核心基金会免费桥接类在行为上也是相似的。但你说得对,NSInputStream *CFReadStreamRef的情况并非如此。苹果的设置套接字流指南只解释了你描述的内容。即使在使用最新的初始化器(如10.6版的inputStreamWithURL: )时,当url是远程的时,它仍然不能工作(例如。http://...)。

我看到继续使用NSInputStream的主要优点是在Objective应用程序中进行更好的集成。在任何时候,您都可以尝试更改NSInputStream *对象的属性,如下所示:

代码语言:javascript
复制
if (!CFReadStreamSetProperty((CFReadStreamRef)read,
                              kCFStreamPropertyShouldCloseNativeSocket,
                              kCFBooleanTrue))
     failure("property change not accepted");

作为所有这些的另一种选择,我建议看看NSURLRequestNSURLConnection对象在URL加载系统编程指南中的描述。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10600638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档