CFStreamCreatePairWithSocketToCFHost CFStreamCreatePairWithSocketToHost и выделения - PullRequest
2 голосов
/ 06 февраля 2012

Может кто-нибудь подсказать, пожалуйста, разницу между CFStreamCreatePairWithSocketToCFHost и CFStreamCreatePairWithSocketToHost звонками.

Также, что такое CFAllocator и что означает, если это NULL или kCFAllocatorDefault. Так как его kCFAllocatorDefault является константой, может кто-то объяснить недостатки kCFAllocatorDefault или это только для исторических целей?

1 Ответ

3 голосов
/ 06 февраля 2012

Разница между 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, опять же, документация - ваш друг. Он используется как способ CoreFoundation для отладки вызовов malloc, free и realloc во всем коде.

Это объект, который позволяет вам писать свои собственные методы для выделения памяти для объекта, а kCFAllocatorDefault использует стандартные вызовы malloc, free и realloc, используемые системой. Передача NULL для CFAllocator работает точно так же, как kCFAllocatorDefault, код использует только системные вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...