- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
NSInputStream *
和CFReadStreamRef
之间的区别似乎是第一个是 Objective-C 对象,而第二个是 native 结构。不过,它们是免费桥接的。
我想实现一个基于网络流的程序。
[NSStream getStreamsToHost:port:inputStream:outputStream:]产生 NSInputStream *
和 NSOutputStream *
。但是,在 iOS 上,此方法不可用。
因此,CFStreamCreatePairWithSocketToHost必须在 iOS 上使用。
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(
kCFAllocatorDefault, host, port, &readStream, &writeStream);
NSInputStream *read = (__bridge NSInputStream *)readStream;
NSOutputStream *write = (__bridge NSOutputStream *)writeStream;
设置流属性时,使用 NSInputStream *
时并非所有属性都可用。特别是 kCFStreamPropertyShouldCloseNativeSocket
会很有趣,以确保在相应流关闭时套接字也关闭。
我是否必须将 NSInputStream *
转换为 CFReadStreamRef
才能设置此属性,然后还原转换以设置此类属性?
...
NSInputStream *
似乎有多个缺点。它的唯一优势真的是我可以提供它自己的子类,而在 CFReadStreamRef
情况下我不能这样做吗?什么时候应该使用哪种方法?
最佳答案
一般来说,大多数 Foundation/CoreFoundation 免费桥接类在行为方面也是相似的。但是你是对的,NSInputStream *
和 CFReadStreamRef
不是这种情况。苹果的Setting Up Socket Streams指南仅解释您所描述的内容。即使使用最新的初始化程序(如 10.6 中可用的 inputStreamWithURL:
),当 url
是远程的(例如 http://...
)。
我认为继续使用 NSInputStream
的主要优势是更好地集成到 Objective-C 应用程序中。在任何时候,您都可以尝试更改 NSInputStream *
对象的属性(read),如下所示:
if (!CFReadStreamSetProperty((CFReadStreamRef)read,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue))
failure("property change not accepted");
作为所有这些的替代方案,我建议看一下 URL Loading System Programming Guide 中描述的 NSURLRequest
和 NSURLConnection
对象.
关于objective-c - CFReadStreamRef 与 NSInputStream *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600638/
大家好, 我正在尝试使用 iphone sdk 实现一个流媒体音乐播放器,基于 Matt Gallagher 的示例代码 ( http://cocoawithlove.com/2008/09/stre
我正在尝试读取存储公钥的 public.pem 文件,但 CFReadStreamRef 始终返回 nil。 publicKeyPath 和 url 不为零(正如我在调试器中看到的那样),并且我没有其
NSInputStream * 和CFReadStreamRef 之间的区别似乎是第一个是 Objective-C 对象,而第二个是 native 结构。不过,它们是免费桥接的。 我想实现一个基于网络
我想将 CFStreamCreatePairWithSocketToHost 与 NSInput 和 OutputStream 一起使用。我有两个 ivars NSInputStream *_inpu
我是一名优秀的程序员,十分优秀!