Tôi yêu ASIHTTPRequest và tôi rất buồn khi thấy nó biến mất. Tuy nhiên, nhà phát triển của ASI đã đúng, ASIHTTPRequest đã trở nên quá lớn và cồng kềnh đến mức anh ta không thể dành thời gian để đưa nó ngang hàng với các tính năng mới nhất của iOS và các khung công tác khác. Tôi đã tiếp tục và bây giờ sử dụng AFNetworking.
Điều đó nói rằng, tôi phải nói rằng AFNetworking không ổn định hơn nhiều so với ASIHTTP, và đối với những thứ tôi sử dụng nó, nó cần được cải tiến.
Tôi thường cần thực hiện các yêu cầu HTTP đến 100 nguồn HTTP trước khi hiển thị kết quả của mình trên màn hình và tôi đã đặt AFHTTPNetworkOperation vào hàng đợi hoạt động. Trước khi tất cả kết quả được tải xuống, tôi muốn có thể hủy tất cả các thao tác bên trong hàng đợi thao tác và sau đó loại bỏ bộ điều khiển chế độ xem lưu giữ kết quả.
Điều đó không phải lúc nào cũng hiệu quả.
Tôi gặp sự cố vào những thời điểm ngẫu nhiên với AFNetworking, trong khi với ASIHTTPRequest, các hoạt động này hoạt động hoàn hảo. Tôi ước mình có thể nói phần cụ thể nào của AFNetworking đang gặp sự cố, vì nó liên tục gặp sự cố ở các điểm khác nhau (tuy nhiên, hầu hết những lần này trình gỡ lỗi đều trỏ đến NSRunLoop tạo đối tượng NSURLConnection). Vì vậy, AFNetworking cần phải trưởng thành để được coi là hoàn chỉnh như ASIHTTPRequest.
Ngoài ra, ASIHTTPRequests hỗ trợ xác thực máy khách, điều mà AFNetworking thiếu tại thời điểm này. Cách duy nhất để triển khai nó là phân lớp AFHTTPRequestOperation và ghi đè các phương thức xác thực của NSURLConnection. Tuy nhiên, nếu bạn bắt đầu tham gia với NSURLConnection, bạn sẽ nhận thấy rằng việc đặt NSURLConnection bên trong trình bao bọc NSOperation và viết các khối hoàn thành không quá khó và bạn sẽ bắt đầu nghĩ rằng điều gì ngăn bạn đổ các thư viện của bên thứ ba.
ASI sử dụng một cách tiếp cận hoàn toàn khác, vì nó sử dụng CFNetworking (các khung nền tảng cấp thấp hơn dựa trên C) để có thể tải xuống và tải tệp lên, bỏ qua hoàn toàn NSURLConnection và chạm đến các khái niệm mà hầu hết các nhà phát triển OS X và iOS của chúng ta đều quá sợ hãi. Do đó, bạn tải lên và tải xuống tệp tốt hơn, thậm chí cả bộ đệm của trang web.
Tôi thích cái nào hơn? Khó mà nói ra được. Nếu AFNetworking đủ trưởng thành, tôi sẽ thích nó hơn ASI. Cho đến lúc đó, tôi không thể không ngưỡng mộ ASI, và cách nó trở thành một trong những framework được sử dụng nhiều nhất mọi thời đại cho OS X và iOS.
CHỈNH SỬA:
Tôi nghĩ đã đến lúc cập nhật câu trả lời này, vì mọi thứ đã thay đổi một chút sau bài đăng này.
Bài đăng này đã được viết một thời gian trước, và AFNetworking đã đủ trưởng thành. Cách đây 1-2 tháng AF đã đăng một bản cập nhật nhỏ cho các hoạt động POST, đó là khiếu nại cuối cùng của tôi về khung này (một lỗi nhỏ ở cuối dòng là lý do khiến tải lên không thành công với AF nhưng hoàn toàn tốt với ASI). Xác thực không phải là vấn đề với AFnetworking, vì đối với các phương pháp xác thực phức tạp, bạn có thể phân lớp hoạt động và thực hiện các cuộc gọi của riêng mình và AFHTTPClient biến xác thực cơ bản trở thành một miếng bánh. Bằng cách phân loại phụ AFHTTPClient, bạn có thể làm cho toàn bộ người tiêu dùng dịch vụ trong thời gian ngắn.
Chưa kể đến các bổ sung UIImage hoàn toàn cần thiết mà AFNetworking cung cấp. Với các khối và khối hoàn thành tùy chỉnh và một số thuật toán thông minh, bạn có thể tạo chế độ xem bảng với tải xuống hình ảnh không đồng bộ và điền vào ô khá dễ dàng, trong khi trong ASI, bạn phải thực hiện các hàng đợi hoạt động để điều chỉnh băng thông và hãy tự hủy và tiếp tục hàng đợi hoạt động theo khả năng hiển thị xem bảng và những thứ tương tự. Thời gian phát triển của các hoạt động như vậy đã được giảm một nửa.
Tôi cũng yêu thích các khối thành công và thất bại. ASI chỉ có một khối hoàn thành (thực chất là khối hoàn thành của NSOperation). Bạn phải kiểm tra xem bạn có gặp lỗi khi hoàn thành hay không và hành động theo đó. Đối với các dịch vụ web phức tạp, bạn có thể bị lạc trong tất cả các "ifs" và "elses"; Trong AFNetworking, mọi thứ đơn giản và trực quan hơn nhiều.
ASI đã rất tuyệt vời vào thời điểm đó, nhưng với AF, bạn có thể thay đổi cách xử lý các dịch vụ web hoàn toàn theo hướng tốt và làm cho các ứng dụng có thể mở rộng dễ dàng hơn. Tôi thực sự tin rằng không có lý do gì để gắn bó với ASI nữa, trừ khi bạn muốn nhắm mục tiêu iOS 3 trở xuống.
ASIFallbackToCacheIfLoadFailsCachePolicy
rất tốt. Và, tôi nghĩ AFNetworking không có hỗ trợ bộ nhớ cache liên tục. Đây là điều không nên đối với tôi.