2011-09-13 1 views
15

Apple의 SimpleURLConnections 샘플을 비롯하여 NSURLResponse를 NSHTTPURLResponse로 간단하게 변환하는 등 많은 코드를 보았습니다. 항상 NSHTTPURLResponse 경우 NSURLConnections NSHTTPURLResponse 반환하지 않는 이유는 무엇입니까?NSURLResponse는 언제 NSHTTPURLResponse입니까?

나는 응답을 단순히 내버려두면 버그가있는 코드를 도입 할까 두렵다.

예를 들어 isKindOfClass를 확인하지 않고이 작업을 수행 할 수 있습니까?

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

답변

17

당신이 당신의 연결이 HTTP 프로토콜을 통해 실행해야하는 경우 그것은 괜찮 :

NSHTTPURLResponse 오브젝트는 HTTP URL로드 요청에 대한 응답을 나타냅니다. 이것은 NSURLResponse의 하위 클래스로서 HTTP 프로토콜 응답에 특정한 정보에 액세스하는 메소드를 제공합니다. 당신은 FTP를 통해 연결하는 경우

, 예를 들어, 다음 잘못된 것 NSURLResponseNSHTTPURLResponse에 캐스팅.

+0

HTTP 응답 코드는 3 자릿수 여야하며, 그 길이를 초과하면 유효한 HTTP 응답 코드가 아닙니다. –

+0

그냥 캐스팅보다 나은 형식 검사를 제안합니다. NSURLResponse와 관련된 많은 충돌 사례가 NSHttpURLResponse가 아닌데도 HTTP 연결 만 처리하고 있습니다. – Psycho

17

더 안전한 방법은 내성 검사입니다.

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