Когда NSURLResponse не является ответом NSHTTPURLResponse?

Я видел много кода, включая образец Apple SimpleURLConnections, который просто отбрасывает любой NSURLResponse на NSHTTPURLResponse. Если всегда есть NSHTTPURLResponse, почему NSURLConnections не возвращает NSHTTPURLResponse?

Я волнуюсь, что, если я просто удручаю ответ, я представляю багги-код.

Например, нормально ли это делать без проверки isKindOfClass?

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
{
 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse;
 // do stuff
}

Ответы

Ответ 1

Это нормально, если вы уверены, что ваше соединение выполняется по протоколу HTTP:

Объект NSHTTPURLResponse представляет собой ответ на запрос загрузки URL-адреса HTTP. Его подкласс NSURLResponse, который предоставляет методы для доступа к информации, специфичной для ответов протокола HTTP.

Если вы подключаетесь через FTP, например, при нажатии NSURLResponse на NSHTTPURLResponse будет некорректно.

Ответ 2

Более безопасный способ сделать это - с интроспекцией.

if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
   NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse;
   // do stuff
}