有人可以告诉我 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
完全相同,代码仅使用系统调用。
关于ios - CFStreamCreatePairWithSocketToCFHost CFStreamCreatePairWithSocketToHost 和分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9161946/