Я пишу некоторый код, который упаковывает некоторые вещи CFNetwork
, чтобы выполнить разрешение DNS в Objective-C.
Все хорошо и работает, но у меня есть несколько вопросов:
Прототип функции обратного вызова для асинхронного разрешения CFHost
передает ссылки на CFStreamError
структуры, даже если в документации сказано, что CFStreamError
устарело и вместо этого следует использовать CFReadStreamCopyError
, что будет возвращать структуру CFError
.
Функция обратного вызова объявлена так:
typedef void (CFHostClientCallBack) (
CFHostRef theHost,
CFHostInfoType typeInfo,
const CFStreamError *error,
void *info);
Похоже, нет альтернативы этому обратному вызову, который использует API, не подлежащие устареванию.
Я думал, что смысл устаревших API в том, что были введены новые, которые заменяют старые? Если это правда, почему нет альтернативного обратного вызова для этого, который использует функцию CFReadStreamCopyError
?
Основная проблема, с которой я столкнулся, заключается в том, что CFStreamErrors
действительно неописуемые ... Могу ли я что-нибудь сделать, чтобы превратить CFStreamError
в CFError
?
Просто уточнить несколько моментов:
Не думаю, что я неправильно прочитал документацию по этому вопросу. метод обратного вызова, используемый в системе асинхронного разрешения CFHosts, передается в CFStreamError
. Хотя CFStreamError
сам по себе не может быть устаревшим, функции, которые его возвращают, а именно CFReadStreamGetError
и CFWriteStreamGetError
, являются устаревшими. Документация предлагает использовать CFReadStreamCopyError
и CFWriteStreamCopyError
, которые возвращают CFError
вместо CFStreamError
.
Я обертываю этот код в Objective-C и много использую объекты Foundation. таким образом, CFError
гораздо более полезен для меня, чем CFStreamError
, потому что он бесплатен, соединен с NSError
, а CFStreamErrors
не содержит почти столько полезной информации, сколько CFError
. Более того, я даже не имею дело с CFStream
напрямую, так почему я должен иметь дело с его конкретной структурой ошибок? Наконец, я хочу в конечном итоге вернуть NSError
при вызове делегата обратно в мой класс-обертку.
Кроме того, я знаю, что устаревание не означает, что метод исчез, но если что-то помечено как устаревшее, было бы целесообразно (по крайней мере для меня) предоставить альтернативу. В противном случае устаревший метод / функция / класс и т. Д. По-прежнему используется, и нет смысла отрицать его, пока что-то не заменит его?