Iphone NSURL响应何时不是NSHTTPURL响应?

Iphone NSURL响应何时不是NSHTTPURL响应?,iphone,ios,nsurlconnection,Iphone,Ios,Nsurlconnection,我见过很多代码,包括Apple的SimpleURLConnections示例,它们只是将任何NSURL响应转换为NSHTTPURLRResponse。如果总是NSHTTPURLResponse,为什么NSURLConnections不返回NSHTTPURLResponse 我担心,如果我只是简单地否定了回应,我就会引入错误代码 例如,在不检查Iskind of Class的情况下执行此操作可以吗 - (NSURLRequest *)connection:(NSURLConnection *)co

我见过很多代码,包括Apple的SimpleURLConnections示例,它们只是将任何NSURL响应转换为NSHTTPURLRResponse。如果总是NSHTTPURLResponse,为什么NSURLConnections不返回NSHTTPURLResponse

我担心,如果我只是简单地否定了回应,我就会引入错误代码

例如,在不检查Iskind of Class的情况下执行此操作可以吗

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

如果您确定您的连接通过HTTP协议运行,则可以:

NSHTTPURLResponse对象表示对HTTP URL加载请求的响应。它是NSURLResponse的一个子类,提供访问HTTP协议响应特定信息的方法


例如,如果您通过FTP连接,则将
nsurresponse
强制转换为
NSHTTPURLResponse
将是不正确的。

更安全的方法是内省

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

HTTP响应代码的长度必须为3位,如果超过该长度,则该代码不是有效的HTTP响应代码。我建议进行更好的类型检查,而不仅仅是强制转换,我有许多与NSURLResponse相关的崩溃案例,即使我只处理HTTP连接,但NSURLResponse不是NSHTTPURLResponse。