When is a NSURLResponse not a NSHTTPURLResponse?

CornPuff picture CornPuff · Sep 13, 2011 · Viewed 8.1k times · Source

I've seen a lot of code, including Apple's SimpleURLConnections sample, that simply cast any NSURLResponse to a NSHTTPURLResponse. If it is always a NSHTTPURLResponse why do the NSURLConnections not return NSHTTPURLResponse?

I'm worried that if I simply downcast the response, I'm introducing buggy code.

For instance, is it OK to do this without checking isKindOfClass?

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

Answer

Nekto picture Nekto · Sep 13, 2011

It is ok if you are sure that your connection runs via HTTP protocol:

An NSHTTPURLResponse object represents a response to an HTTP URL load request. It’s a subclass of NSURLResponse that provides methods for accessing information specific to HTTP protocol responses.

If you are connecting via FTP, for example, then casting NSURLResponse to NSHTTPURLResponse will be incorrect.