나는 ASIHTTPRequest를 사랑했고 그것이 진행되는 것을보고 슬펐습니다. 그러나 ASI의 개발자가 옳았습니다. ASIHTTPRequest는 너무 커지고 부풀려서 iOS 및 기타 프레임 워크의 최신 기능과 동등하게 만드는 데 시간을 할애 할 수 없었습니다. 계속해서 AFNetworking을 사용합니다.
즉, AFNetworking은 ASIHTTP보다 훨씬 더 불안정하며 제가 사용하는 용도에 대해서는 개선이 필요합니다.
화면에 결과를 표시하기 전에 100 개의 HTTP 소스에 HTTP 요청을해야하는 경우가 많으며 AFHTTPNetworkOperation을 작업 대기열에 넣었습니다. 모든 결과를 다운로드하기 전에 작업 대기열 내의 모든 작업을 취소 한 다음 결과를 보유하는 뷰 컨트롤러를 닫을 수 있기를 원합니다.
항상 작동하지는 않습니다.
AFNetworking에서 무작위로 충돌이 발생하는 반면 ASIHTTPRequest를 사용하면이 작업이 완벽하게 작동했습니다. AFNetworking의 특정 부분이 다른 지점에서 계속 충돌하므로 충돌이 발생한다고 말할 수 있기를 바랍니다 (그러나 대부분의 경우 디버거는 NSURLConnection 객체를 생성하는 NSRunLoop을 가리 킵니다). 따라서 AFNetworking은 ASIHTTPRequest처럼 완전한 것으로 간주 되려면 성숙해야합니다.
또한 ASIHTTPRequests는 현재 AFNetworking에없는 클라이언트 인증을 지원합니다. 이를 구현하는 유일한 방법은 AFHTTPRequestOperation을 하위 클래스로 만들고 NSURLConnection의 인증 방법을 재정의하는 것입니다. 그러나 NSURLConnection에 참여하기 시작하면 NSURLConnection을 NSOperation 래퍼에 넣고 완료 블록을 작성하는 것이 그렇게 어렵지 않으며 타사 라이브러리를 덤프하지 못하게하는 것이 무엇인지 생각하기 시작할 것입니다.
ASI는 CFNetworking (C 기반의 하위 수준 기반 프레임 워크)을 사용하여 다운로드 및 파일 업로드를 가능하게하고 NSURLConnection을 완전히 건너 뛰고 대부분의 OS X 및 iOS 개발자가 너무 두려워하는 개념을 만지기 때문에 완전히 다른 접근 방식을 사용합니다. 이로 인해 더 나은 파일 업로드 및 다운로드, 심지어 웹 페이지 캐시를 얻을 수 있습니다.
내가 선호하는 것은 무엇입니까? 말하기 어렵습니다. AFNetworking이 충분히 성숙되면 ASI보다 더 좋아할 것입니다. 그때까지 저는 ASI에 감탄하지 않을 수 없습니다. 그리고 그것이 OS X와 iOS에서 가장 많이 사용되는 프레임 워크 중 하나가 된 방식입니다.
편집 :
이 게시물 이후에 상황이 약간 변경 되었으므로이 답변을 업데이트 할 때라고 생각합니다.
이 게시물은 얼마 전에 작성되었으며 AFNetworking은 충분히 성숙했습니다. 1 ~ 2 개월 전 AF는 프레임 워크에 대한 마지막 불만 인 POST 작업에 대한 작은 업데이트를 게시했습니다 (작은 라인 종료 오류는 AF에서 에코 네스트 업로드가 실패했지만 ASI에서는 정상적으로 완료되는 이유였습니다). 복잡한 인증 방법의 경우 작업을 하위 클래스 화하고 직접 호출 할 수 있으며 AFHTTPClient는 기본 인증을 케이크 조각으로 만들 수 있으므로 인증은 AF 네트워킹에서 문제가되지 않습니다. AFHTTPClient를 서브 클래 싱하면 짧은 시간에 전체 서비스 소비자를 만들 수 있습니다.
AFNetworking이 제공하는 절대적으로 필요한 UIImage 추가는 말할 것도 없습니다. 블록 및 사용자 지정 완료 블록 및 일부 영리한 알고리즘을 사용하면 비동기 이미지 다운로드 및 셀 채우기를 사용하여 테이블보기를 매우 쉽게 만들 수있는 반면, ASI에서는 대역폭 조절을위한 작업 대기열을 만들고 다음에 따라 작업 대기열을 취소하고 다시 시작해야했습니다. 테이블 뷰 가시성 등이 있습니다. 이러한 작업의 개발 시간이 절반으로 단축되었습니다.
나는 또한 성공과 실패 블록을 좋아합니다. ASI에는 완료 블록 (실제로 NSOperation의 완료 블록) 만 있습니다. 완료시 오류가 있는지 확인하고 그에 따라 조치를 취해야했습니다. 복잡한 웹 서비스의 경우 모든 "ifs"및 "elses"에서 길을 잃을 수 있습니다. AFNetworking에서는 상황이 훨씬 더 간단하고 직관적입니다.
ASI는 그 당시에는 훌륭했지만 AF를 사용하면 웹 서비스를 잘 처리하는 방식을 완전히 바꿀 수 있고 확장 가능한 응용 프로그램을 더 쉽게 만들 수 있습니다. iOS 3 이하를 타겟팅하지 않는 한 더 이상 ASI를 고수 할 이유가 없다고 정말 믿습니다.
ASIFallbackToCacheIfLoadFailsCachePolicy
매우 훌륭하기 때문입니다. 그리고 AFNetworking에는 영구 캐시 지원이 없다고 생각합니다. 이것은 나에게 있어서는 안된다.