什么时候NSURLResponse不是NSHTTPURLResponse?

时间:2011-09-13 04:52:49

标签: iphone ios nsurlconnection

我见过很多代码,包括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 个答案:

答案 0 :(得分:19)

更安全的方法是内省。

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

答案 1 :(得分:17)

如果您确定您的连接是通过HTTP协议运行的,那就没关系了:

  

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

例如,如果您通过FTP连接,则将NSURLResponse投射到NSHTTPURLResponse将不正确。