什么时候NSURLResponse不是NSHTTPURLResponse?

我见过很多代码,包括苹果的SimpleURLConnections示例,只是将任何NSURLResponse转换为NSHTTPURLResponse。 如果它总是一个NSHTTPURLResponse为什么NSURLConnections不返回NSHTTPURLResponse?

我很担心,如果我只是低调的回应,我介绍错误的代码。

例如,没有检查isKindOfClass可以吗?

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

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

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

例如,如果通过FTP进行连接,则将NSURLResponse强制NSURLResponseNSHTTPURLResponse将不正确。

更安全的做法是自省。

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