Ссылка CFReadStream
CFReadStream
обеспечивает интерфейс для чтения потока байтов или синхронно или асинхронно. Можно создать потоки, читающие байты из блока памяти, файла или универсального сокета. Все потоки должны быть открыты, с помощью CFReadStreamOpen, перед чтением.
Используйте CFWriteStream для записи потоков байтов. Платформа CFNetwork определяет дополнительный тип потока для чтения ответов на Запросы HTTP.
CFReadStream “бесплатный соединенный мостом” с его дубликатом Основы Какао, NSInputStream. Это означает, что Базовый тип Основы является взаимозаменяемым в вызовах функции или вызовах метода с соединенным мостом объектом Основы. Поэтому в методе, где Вы видите NSInputStream *
параметр, можно передать в CFReadStreamRef, и в функции, где Вы видите параметр CFReadStreamRef, можно передать в NSInputStream
экземпляр. Отметьте, однако, что у Вас могут быть или делегат или обратные вызовы, но не оба. Посмотрите Бесплатные Соединенные мостом Типы для получения дополнительной информации о бесплатном образовании моста.
-
Создает читаемый поток для блока памяти.
Объявление
Swift
func CFReadStreamCreateWithBytesNoCopy(_
alloc
: CFAllocator!, _bytes
: UnsafePointer<UInt8>, _length
: CFIndex, _bytesDeallocator
: CFAllocator!) -> CFReadStream!Objective C
CFReadStreamRef CFReadStreamCreateWithBytesNoCopy ( CFAllocatorRef alloc, const UInt8 *bytes, CFIndex length, CFAllocatorRef bytesDeallocator );
Параметры
alloc
Средство выделения для использования для выделения памяти для нового объекта. Передача
NULL
илиkCFAllocatorDefault
использовать текущее средство выделения по умолчанию.bytes
Буфер памяти для чтения. Эта память должна существовать для времени жизни нового потока.
length
Размер
bytes
.bytesDeallocator
Средство выделения для использования для освобождения
bytes
когда освобожден поток. ПередачаkCFAllocatorNull
препятствовать тому, чтобы поток освободилbytes
.Возвращаемое значение
Новый поток чтения, или
NULL
при отказе. Владение соблюдает Создать Правило.Обсуждение
Необходимо открыть поток, с помощью CFReadStreamOpen, прежде, чем читать из него.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Создает читаемый поток для файла.
Объявление
Swift
func CFReadStreamCreateWithFile(_
alloc
: CFAllocator!, _fileURL
: CFURL!) -> CFReadStream!Objective C
CFReadStreamRef CFReadStreamCreateWithFile ( CFAllocatorRef alloc, CFURLRef fileURL );
Параметры
alloc
Средство выделения для использования для выделения памяти для нового объекта. Передача
NULL
илиkCFAllocatorDefault
использовать текущее средство выделения по умолчанию.fileURL
URL файла для чтения. URL должен использовать схему файла.
Возвращаемое значение
Новый читаемый потоковый объект, или
NULL
при отказе. Владение соблюдает Создать Правило.Обсуждение
Необходимо открыть поток, с помощью CFReadStreamOpen, прежде, чем читать из него.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Закрывает читаемый поток.
Объявление
Swift
func CFReadStreamClose(_
stream
: CFReadStream!)Objective C
void CFReadStreamClose ( CFReadStreamRef stream );
Параметры
stream
Поток для закрытия.
Обсуждение
Эта функция завершает поток байтов и выпускает любые системные ресурсы, требуемые потоком. Поток удален из любых циклов выполнения, в которых он был запланирован. После того, как закрытый, поток не может быть вновь открыт.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Открывает поток для чтения.
Объявление
Swift
func CFReadStreamOpen(_
stream
: CFReadStream!) -> BooleanObjective C
Boolean CFReadStreamOpen ( CFReadStreamRef stream );
Параметры
stream
Поток для открытия.
Возвращаемое значение
TRUE
еслиstream
был успешно открыт,FALSE
иначе. Еслиstream
не находится вkCFStreamStatusNotOpen
состояние, эта функция возвратыFALSE
.Обсуждение
Открытие потока заставляет его резервировать все системные ресурсы, которых требуется. Если поток может открыться в фоновом режиме без блокирования, эта функция всегда возвращается
true
. Для изучения, когда фоновая операция открытия завершается можно или запланировать поток в цикл выполнения сCFReadStreamScheduleWithRunLoop
и ожидайте клиента потока (набор сCFReadStreamSetClient
) чтобы быть уведомленными или можно опросить потоковое использованиеCFReadStreamGetStatus
, ожидание состоянияkCFStreamStatusOpen
илиkCFStreamStatusError
.Вы не должны ожидать, пока поток не закончил открываться в фоновом режиме прежде, чем вызвать
CFReadStreamRead
функция. Операция чтения просто блокирует, пока открытое не завершилось.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Считывает данные из читаемого потока.
Объявление
Swift
func CFReadStreamRead(_
stream
: CFReadStream!, _buffer
: UnsafeMutablePointer<UInt8>, _bufferLength
: CFIndex) -> CFIndexObjective C
CFIndex CFReadStreamRead ( CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength );
Параметры
stream
Поток, из которого можно читать.
buffer
Буфер, в который можно поместить данные.
bufferLength
Размер
buffer
и максимальное количество байтов для чтения.Возвращаемое значение
Число байтов читало;
0
если поток достиг своего конца; или-1
если или поток не открыт или ошибка, происходит.Обсуждение
Если
stream
находится в процессе открытия, эта функция ожидает, пока это не завершилось. Это функциональные блоки по крайней мере до одного байта доступно; это не блокирует доbuffer
заполнено. Чтобы избежать блокировать, вызовите эту функцию только еслиCFReadStreamHasBytesAvailable
возвратыTRUE
или после клиента потока (набор сCFReadStreamSetClient
) уведомляется относительно akCFStreamEventHasBytesAvailable
событие.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Планирует поток в цикл выполнения.
Объявление
Swift
func CFReadStreamScheduleWithRunLoop(_
stream
: CFReadStream!, _runLoop
: CFRunLoop!, _runLoopMode
: CFString!)Objective C
void CFReadStreamScheduleWithRunLoop ( CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode );
Параметры
stream
Поток для планирования.
runLoop
Цикл выполнения, с которым можно запланировать
stream
.runLoopMode
Режим цикла выполнения
runLoop
в котором можно запланироватьstream
.Обсуждение
После планирования
stream
с циклом выполнения, его клиент (набор сCFReadStreamSetClient
) уведомляется, когда различные события происходят с потоком, такой как тогда, когда он заканчивает открываться, когда он имеет байты в наличии, и когда происходит ошибка. Поток может быть запланирован с многократными циклами выполнения и выполненными режимами цикла. ИспользоватьCFReadStreamUnscheduleFromRunLoop
позже удалитьstream
от цикла выполнения.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Удаляет поток чтения из данного выполненного цикла.
Объявление
Swift
func CFReadStreamUnscheduleFromRunLoop(_
stream
: CFReadStream!, _runLoop
: CFRunLoop!, _runLoopMode
: CFString!)Objective C
void CFReadStreamUnscheduleFromRunLoop ( CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode );
Параметры
stream
Поток, чтобы не запланировать.
runLoop
Цикл выполнения, из которого можно удалить
stream
.runLoopMode
Режим цикла выполнения
runLoop
из которого можно удалитьstream
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Возвращает значение свойства для потока.
Объявление
Swift
func CFReadStreamCopyProperty(_
stream
: CFReadStream!, _propertyName
: CFString!) -> AnyObject!Objective C
CFTypeRef CFReadStreamCopyProperty ( CFReadStreamRef stream, CFStringRef propertyName );
Параметры
stream
Поток для исследования.
propertyName
Имя потокового свойства для получения. Доступные свойства для стандартных Базовых потоков Основы перечислены в Ссылке CFStream.
Возвращаемое значение
Значение свойства
propertyName
. Владение соблюдает Создать Правило.Обсуждение
Каждый тип потока может определить ряд свойств, что или описать или конфигурируют отдельные потоки. Свойство может быть любой информацией о потоке кроме фактических данных потоковые дескрипторы. Примеры включают заголовки от передачи HTTP, ожидаемого числа байтов, данных полномочий файла, и т.д. Использовать
CFReadStreamSetProperty
изменить значение свойства, несмотря на то, что некоторые свойства только для чтения.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Возвращает указатель на внутренний буфер потока непрочитанных данных, если это возможно.
Объявление
Swift
func CFReadStreamGetBuffer(_
stream
: CFReadStream!, _maxBytesToRead
: CFIndex, _numBytesRead
: UnsafeMutablePointer<CFIndex>) -> UnsafePointer<UInt8>Objective C
const UInt8 * CFReadStreamGetBuffer ( CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead );
Параметры
stream
Поток для исследования.
maxBytesToRead
Максимальное количество байтов для чтения. Если больше, чем
0
,maxBytesToRead
ограничивает число чтения байтов; если0
или меньше, все доступные байты читаются.numBytesRead
По возврату, содержит длину возвращенного буфера. Если
stream
не открыто или встретился с ошибкой,numBytesRead
установлен в-1
.Возвращаемое значение
Указатель на внутренний буфер непрочитанных данных для
stream
, если возможный;NULL
иначе. Буфер хорош только, пока следующая операция с потоками не обратилась к потоку. Вы не должны ни изменять содержание возвращенного буфера, ни пытаться освободить буфер; это все еще принадлежит потоку. Байты, возвращенные в буфере, считают считанными из потока.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Возвращает ошибку, связанную с потоком.
Объявление
Swift
func CFReadStreamCopyError(_
stream
: CFReadStream!) -> CFError!Objective C
CFErrorRef CFReadStreamCopyError ( CFReadStreamRef stream );
Параметры
stream
Поток для исследования.
Возвращаемое значение
Объект CFError, описывающий текущую проблему с потоком, или
NULL
если нет никакой ошибки. Владение соблюдает Создать Правило.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.5 и позже.
-
Возвращает ошибочное состояние потока.
Использовать
CFReadStreamCopyError
вместо этого.Объявление
Swift
func CFReadStreamGetError(_
stream
: CFReadStream!) -> CFStreamErrorObjective C
CFStreamError CFReadStreamGetError ( CFReadStreamRef stream );
Параметры
stream
Поток для исследования.
Возвращаемое значение
Ошибочное состояние
stream
возвращенный в aCFStreamError
структура.Ошибочное поле
0
если не произошла никакая ошибка. Если ошибочное поле не0
,domain
поле содержит код, идентифицирующий домен в который значениеerror
поле должно быть интерпретировано.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Возвращает текущее состояние потока.
Объявление
Swift
func CFReadStreamGetStatus(_
stream
: CFReadStream!) -> CFStreamStatusObjective C
CFStreamStatus CFReadStreamGetStatus ( CFReadStreamRef stream );
Параметры
stream
Поток для исследования.
Возвращаемое значение
Текущее состояние
stream
. ПосмотритеCFStreamStatus
для списка возможных состояний.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Возвращает булево значение, указывающее, имеет ли читаемый поток данные, которые могут быть считаны без блокирования.
Объявление
Swift
func CFReadStreamHasBytesAvailable(_
stream
: CFReadStream!) -> BooleanObjective C
Boolean CFReadStreamHasBytesAvailable ( CFReadStreamRef stream );
Параметры
stream
Поток для исследования.
Возвращаемое значение
TRUE
если данные могут быть считаны изstream
без блокирования, иначеFALSE
. Еслиstream
не может сказать, доступны ли данные, фактически не пытаясь считать данные, эта функция возвратыTRUE
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Присваивает клиент потоку, получающему обратные вызовы, когда определенные события имеют место.
Объявление
Swift
func CFReadStreamSetClient(_
stream
: CFReadStream!, _streamEvents
: CFOptionFlags, _clientCB
: CFReadStreamClientCallBack, _clientContext
: UnsafeMutablePointer<CFStreamClientContext>) -> BooleanObjective C
Boolean CFReadStreamSetClient ( CFReadStreamRef stream, CFOptionFlags streamEvents, CFReadStreamClientCallBack clientCB, CFStreamClientContext *clientContext );
Параметры
stream
Поток для изменения.
streamEvents
Набор событий, для которых клиент должен получить обратные вызовы. События перечислены в
CFStreamEventType
. Если Вы передаетеkCFStreamEventNone
, текущий клиент дляstream
удален.clientCB
Клиентская функция обратного вызова, которую вызовут, когда одно из событий запросило в
streamEvents
происходит. ЕслиNULL
, текущий клиент дляstream
удален.clientContext
Структура, содержащая контекстную информацию для потокового клиента. Функция копирует информацию из структуры, таким образом, память, которой указывают
clientContext
не должен сохраняться вне вызова функции. ЕслиNULL
, текущий клиент дляstream
удален.Возвращаемое значение
TRUE
если поток поддерживает асинхронное уведомление, иначеFALSE
.Обсуждение
Чтобы избежать опрашивать и блокировать, можно зарегистрировать клиент для слушания об интересных событиях, происходящих на потоке. Только одному клиенту на поток разрешают; регистрация нового клиента заменяет предыдущий.
Как только Вы установили клиент, необходимо запланировать поток в использовании цикла выполнения
CFReadStreamScheduleWithRunLoop
так, чтобы клиент мог получить асинхронные уведомления. Можно запланировать каждый поток в многократных циклах выполнения (например, при использовании пула потоков). Это - ответственность вызывающей стороны гарантировать, что по крайней мере один из запланированных циклов выполнения выполняется, иначе обратный вызов нельзя вызвать.Несмотря на то, что все Базовые потоки Основы в настоящее время поддерживают асинхронное уведомление, будущие потоковые типы не могут. Если поток не поддерживает асинхронное уведомление, эта функция возвраты
false
. Как правило, такие потоки никогда не блокируют для устройства I/O (например, потоковая память чтения) и не получают преимущества от асинхронного уведомления.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Устанавливает значение свойства для потока.
Объявление
Swift
func CFReadStreamSetProperty(_
stream
: CFReadStream!, _propertyName
: CFString!, _propertyValue
: AnyObject!) -> BooleanObjective C
Boolean CFReadStreamSetProperty ( CFReadStreamRef stream, CFStringRef propertyName, CFTypeRef propertyValue );
Параметры
stream
Поток для изменения.
propertyName
Имя свойства для установки. Доступные свойства для стандартных Базовых потоков Основы перечислены в Ссылке CFStream.
propertyValue
Значение, в которое можно установить свойство
propertyName
дляstream
. Позволенный тип данных значения зависит от устанавливаемого свойства.Возвращаемое значение
TRUE
еслиstream
распознает и принимает данную пару значения свойства, иначеFALSE
.Обсуждение
Каждый тип потока может определить ряд свойств, что или описать или конфигурируют отдельные потоки. Свойство может быть любой интересной информацией о потоке. Примеры включают заголовки от передачи HTTP, ожидаемого числа байтов, данных полномочий файла, и т.д. Свойства, которые могут быть установлены, конфигурируют поведение потока и могут быть модифицируемыми только в определенные времена, такой как, прежде чем был открыт поток. (Фактически, необходимо предположить, что можно установить свойства только прежде, чем открыть поток, если не указано иное.) Для чтения значения использования свойства
CFReadStreamCopyProperty
, несмотря на то, что некоторые свойства только для записи.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.2 и позже.
-
Возвращает идентификатор типа
CFReadStream
непрозрачный тип.Объявление
Swift
func CFReadStreamGetTypeID() -> CFTypeID
Objective C
CFTypeID CFReadStreamGetTypeID ( void );
Возвращаемое значение
Идентификатор типа для
CFReadStream
непрозрачный тип.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.1 и позже.
-
Когда определенные типы действия имеют место на читаемом потоке, обратный вызов вызвал.
Объявление
Swift
typealias CFReadStreamClientCallBack = CFunctionPointer<((CFReadStream!, CFStreamEventType, UnsafeMutablePointer<Void>) -> Void)>
Objective C
typedef void (*CFReadStreamClientCallBack) ( CFReadStreamRef stream, CFStreamEventType eventType, void *clientCallBackInfo );
Параметры
stream
Поток, испытавший событие
eventType
.eventType
Событие, заставившее обратный вызов быть вызванным. Возможные события перечислены в
CFStreamEventType
.clientCallBackInfo
info
элементCFStreamClientContext
структура, использовавшаяся при установке клиента дляstream
.Обсуждение
Этот обратный вызов вызывают только для событий, которые требуют при установке клиента с
CFReadStreamSetClient
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Ссылка на читаемый потоковый объект.
Объявление
Swift
typealias CFReadStreamRef = CFReadStream
Objective C
typedef struct __CFReadStream *CFReadStreamRef;
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Структура, содержащая определенные с помощью программы данные и обратные вызовы, с которыми можно сконфигурировать клиентское поведение потока.
Объявление
Swift
struct CFStreamClientContext { var version: CFIndex var info: UnsafeMutablePointer<Void> var retain: CFunctionPointer<((UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>)> var release: CFunctionPointer<((UnsafeMutablePointer<Void>) -> Void)> var copyDescription: CFunctionPointer<((UnsafeMutablePointer<Void>) -> Unmanaged<CFString>!)> }
Objective C
struct CFStreamClientContext { CFIndex version; void *info; CFAllocatorRetainCallBack retain; CFAllocatorReleaseCallBack release; CFAllocatorCopyDescriptionCallBack copyDescription; }; typedef struct CFStreamClientContext CFStreamClientContext;
Поля
version
Номер версии структуры. Должен быть
0
.info
Произвольный указатель на определенные с помощью программы данные, которые могут быть связаны с клиентом. Этот указатель передается обратным вызовам, определенным в контексте и к клиентской функции обратного вызова
CFReadStreamClientCallBack
.retain
Сохранить обратный вызов для Вашего определенного с помощью программы
info
указатель. Может бытьNULL
.release
Обратный вызов выпуска для Вашего определенного с помощью программы
info
указатель. Может бытьNULL
.copyDescription
Обратный вызов описания копии для Вашего определенного с помощью программы
info
указатель. Может бытьNULL
.Доступность
Доступный в OS X v10.0 и позже.