ios - CFStreamCreatePairWithSocketToCFHost CFStreamCreatePairWithSocketToHost 和分配

标签 ios sockets memory-management

有人可以告诉我 CFStreamCreatePairWithSocketToCFHostCFStreamCreatePairWithSocketToHost 调用之间的区别吗?

还有什么是 CFAllocator 以及如果它是 NULLkCFAllocatorDefault 的含义是什么。由于它的 kCFAllocatorDefault 是一个 const,有人可以解释一下 kCFAllocatorDefault 的优点还是仅用于历史目的?

最佳答案

CFStreamCreatePairWithSocketToCFHost之间的区别和CFStreamCreatePairWithSocketToHost只是地址传入的方式。

CFStreamCreatePairWithSocketToHost ,您可以简单地定义 CFStringRef (或 NSString )代表主机的域/IP。

CFHost但是,它使您可以通过 sockaddr_in 控制地址。结构体,定义于 <netinet/in.h> 。您创建一个 CFHostRef以类似于以下的方式:

struct sockaddr_in ip4addr; // note that this only works for ipv4, for ipv6 you need struct sockaddr_in6.

ip4addr.sin_family = AF_INET;
ip4addr.sin_port = htons(3490);
inet_pton(AF_INET, "10.0.0.1", &ip4addr.sin_addr);

CFDataRef sockData = CFDataCreate(NULL, &ip4addr, sizeof(ip4addr));
CFHostRef host = CFHostCreateWithAddress(NULL, sockData);
// use 'host' to create your stream   

CFRelease(host);
CFRelease(sockData);

这使您可以对套接字本身的操作进行一些(大部分是不必要的)控制,在大多数情况下,CFHost版本不是必需的。

对于CFAllocator再次强调,文档是您的 friend 。它用作CoreFoundation调试方式malloc , free ,和realloc整个代码中的调用。

它是一个对象,允许您编写自己的方法来为对象分配内存,并且 kCFAllocatorDefault使用标准malloc , free ,和realloc系统使用的调用。路过NULL对于CFAllocatorkCFAllocatorDefault 完全相同,代码仅使用系统调用。

关于ios - CFStreamCreatePairWithSocketToCFHost CFStreamCreatePairWithSocketToHost 和分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9161946/

相关文章:

ios - 在传递图像的同时调用电话号码的方法

ios - webkit translate3d 问题(透视)

c - 如何获取套接字中命令的正常运行时间

linux - libc内存管理

c++ - c++中指针变量的内存释放

ios - 删除服务器/后端帐户后,iOS 订阅会发生什么情况?

ios - 获取下载数据的本地 URL,而不是提供服务器 URL

sockets - 在处理其他数据时接收到数据时,套接字select()的预期行为?

c - 在以太网帧中设置 CoS(PCP、802.1P)

C++使用delete []删除指针?