Я в процессе преобразования доступной библиотеки SKP_SMTP для реализации SMTP-клиента в моем приложении для iPhone.После долгой и трудной работы по исправлению ошибок и проверкам памяти я сузил проблемы до одной.Случается, что утечки памяти происходят при вызове CFStreamCreatePairWithSocketToCFHost (подтверждается инструментом Leaks в инструментах), что мне кажется странным как CFReadStreamRef параметры readStream и writeStream либо CFReleased на более поздней стадии, либо назначены соответствующему объекту NSStream через __ bridge_transfer (что в конечном итоге должно привести управление памятью потоков из CoreFoundation кARC).Я гуглил, но единственные решения, которые я нашел, - сбор мусора (явно недоступный в ARC): я что-то упустил или этого не должно произойти?Код следующий, спасибо большое
@implementation NSStream (SKPSMTPExtensions)
+ (void)getStreamsToHostNamed:(NSString *)hostName port:(NSInteger)port inputStream: (NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream
{
CFHostRef host;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
readStream = NULL;
writeStream = NULL;
host = CFHostCreateWithName(NULL, (__bridge_retained CFStringRef) hostName);
if (host != NULL)
{
// Memory leak at this line: strange as readStream & writeStream are either CFReleased or _bridge_transfered to ARC
(void) CFStreamCreatePairWithSocketToCFHost(NULL, host, port, &readStream, &writeStream);
CFRelease(host);
}
if (inputStream == NULL)
{
CFRelease(readStream);
}
else
{
*inputStream = (__bridge_transfer NSInputStream *) readStream;
}
if (outputStream == NULL)
{
CFRelease(writeStream);
}
else
{
*outputStream = (__bridge_transfer NSOutputStream *) writeStream;
}
}
@end