能否请您给我CFStreamCreatePairWithSocketToCFHostCFStreamCreatePairWithSocketToHost调用之间的区别。

另外,CFAllocator是什么,如果是NULLkCFAllocatorDefault,它的含义是什么。由于kCFAllocatorDefault是const,因此有人可以解释kCFAllocatorDefault的优点,还是仅出于历史目的?

最佳答案

CFStreamCreatePairWithSocketToCFHostCFStreamCreatePairWithSocketToHost之间的区别只是地址的传递方式。

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的方法,用于调试整个代码中的mallocfreerealloc调用。

它是一个对象,允许您编写自己的方法来为对象分配内存,并且kCFAllocatorDefault使用系统使用的标准mallocfreerealloc调用。传递NULLCFAllocatorkCFAllocatorDefault完全相同,该代码仅使用系统调用。

10-04 21:43