CFStreamCreatePairWithSocketToCFHost CFStreamCreatePairWithSocketToHost和分配

时间:2012-02-06 14:50:07

标签: ios sockets memory-management

有人可以告诉我CFStreamCreatePairWithSocketToCFHostCFStreamCreatePairWithSocketToHost来电之间的区别。

另外什么是CFAllocator,如果是NULLkCFAllocatorDefault则是什么意思。由于它的kCFAllocatorDefault是一个常量,因此有人可以解释kCFAllocatorDefault的遗传或仅仅是出于历史目的吗?

1 个答案:

答案 0 :(得分:3)

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,再一次,文档是你的朋友。它用作CoreFoundation在整个代码中调试mallocfreerealloc调用的方式。

这是一个允许您编写自己的方法来为对象分配内存的对象,kCFAllocatorDefault使用标准的mallocfreerealloc调用系统使用的。通过NULL CFAllocator的工作与kCFAllocatorDefault完全相同,代码只使用系统调用。