能否请您给我CFStreamCreatePairWithSocketToCFHost
和CFStreamCreatePairWithSocketToHost
调用之间的区别。
另外,CFAllocator
是什么,如果是NULL
或kCFAllocatorDefault
,它的含义是什么。由于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
的CFAllocator
与kCFAllocatorDefault
完全相同,该代码仅使用系统调用。