Когда NSURLResponse не является NSHTTPURLResponse? - PullRequest
16 голосов
/ 13 сентября 2011

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

Я боюсь, что если я просто опущу ответ, я введу ошибочный код.

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

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

Ответы [ 2 ]

19 голосов
/ 27 февраля 2012

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

if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
   NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse;
   // do stuff
}
17 голосов
/ 13 сентября 2011

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

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

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

...