Когда 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
}