2011-09-13 15 views
15

Tôi đã nhìn thấy rất nhiều mã, kể cả mẫu SimpleURLConnections của Apple, chỉ đơn giản là truyền bất kỳ NSURLResponse nào tới NSHTTPURLResponse. Nếu nó luôn là NSHTTPURLResponse tại sao NSURLConnections không trả về NSHTTPURLResponse?Khi nào một NSURLResponse không phải là NSHTTPURLResponse?

Tôi lo lắng rằng nếu tôi chỉ đơn giản là từ chối phản hồi, tôi sẽ giới thiệu mã lỗi. Ví dụ:

Ví dụ, bạn có thể thực hiện việc này mà không kiểm tra isKindOfClass không?

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

Trả lời

17

Nó là ok nếu bạn chắc chắn rằng kết nối của bạn chạy qua giao thức HTTP:

Một NSHTTPURLResponse đối tượng đại diện cho một phản ứng với một yêu cầu tải URL HTTP. Đó là một phân lớp của NSURLResponse cung cấp các phương thức truy cập thông tin cụ thể cho các phản hồi giao thức HTTP.

Nếu bạn đang kết nối qua FTP, ví dụ, sau đó truyền NSURLResponse đến NSHTTPURLResponse sẽ không chính xác.

+0

Mã phản hồi HTTP phải dài 3 chữ số, nếu bạn nhận được nhiều hơn độ dài đó, không phải là mã phản hồi HTTP hợp lệ. –

+0

Tôi đề xuất thực hiện kiểm tra kiểu tốt hơn chỉ là diễn viên, tôi có nhiều trường hợp sự cố liên quan đến NSURLResponse KHÔNG phải là NSHTTPURLResponse mặc dù tôi chỉ xử lý các kết nối HTTP. – Psycho

17

Cách an toàn hơn để thực hiện điều đó là có sự mẫn cảm.

if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse; 
    // do stuff 
} 
Các vấn đề liên quan