2014-01-25 3 views
4

내 응용 프로그램에서 내 모든 연결에 AFNetworking을 사용하고 있습니다. 모든 AFNetworking 코드를 처리하고 AFHTTPRequestOperationManager을 사용하는 싱글 톤 '클라이언트'클래스를 만들었습니다. 내가 혼란스러워하는 점은 AFHTTPRequestOperationManager 객체가 속성이어야하는지 아니면 내 클라이언트가 연결을 요청할 때마다 객체를 다시 만들어야 하는가입니다. 속성 인 경우 AFHTTPRequestOperationManager의 동일한 인스턴스가 동시에 사용되므로 내 클라이언트가 비동기 적으로 여러 번 호출되거나 문제를 일으킬 수 있습니까?AFHTTPRequestOperationManager 속성이 공유 클라이언트에 있습니까?

+0

@DavidCaunt 속성을 시도하지는 않았지만 인스턴스 변수에 관리자를 저장하려고 시도했지만 액세스가 잘못되었습니다. 어떤 이유로 인해 변수에 할당 한 인스턴스가 없어졌습니다. 그래서 사용 (로컬 변수)에 따라 새로운 관리자를 초기화하는 것이 더 낫다고 생각합니다. 그건 그렇고, 인스턴스 변수가 강한 속성이 작동하는 것처럼 기본적으로 할당 된 객체에 대한 강력한 포인터를 가져야하므로 ARC를 사용하고 있습니다. – cessmestreet

답변

4

일반적으로 사용자의 싱글 톤 '클라이언트'클래스는 AFHTTPRequestOperationManager의 하위 클래스입니다. 또한 속성 일 수도 있지만 메서드를 재정의 할 수는 없습니다. 일부 일반적으로 무시 방법은 다음과 같습니다

  • - HTTPRequestOperationWithRequest:success:failure:이, (이 모든 요청에 ​​동일한 헤더를 필요로하는 경우, 예를 들어) 모든 요청 작업이
  • – initWithBaseURL: 구성되는 방법을 수정하기 위해 작업 관리자
  • 에 추가 사용자 정의를 적용 할

그렇다면 속성은 필요에 따라 잘 작동 할 수 있습니다. AFHTTPRequestOperationManager의 동일한 인스턴스 이후, 그 원인이 문제는 속성 인 경우,

내 클라이언트는 비동기 적으로 여러 번 호출 할 수 있습니다, 또는 것입니다 : 마지막으로

과을 (. 일부 즐거운 주말 읽기 Prefer composition over inheritance? 참조) 가능하면 동시에 사용됩니까?

예, AFHTTPRequestOperationManager은 스레드로부터 안전하도록 설계되었습니다. 당신은 그것을 다른 스레드에서 처리하도록 말할 수 있습니다. UI 작업은 대개 거기에서 수행되므로 완성 블록은 항상 메인 스레드에서 호출됩니다.

+0

결국 AFHTTPRequestOperationManager'를 하위 클래스로 만들지 않기로했습니다. 왜냐하면 결국 내 앱이 iOS6 지원을 중단 할 때 AFURLSessionManager로 전환하기를 원하기 때문입니다. 중립적 인 클라이언트를 갖는 것이 원활한 전환을 위해 더 나은 것으로 보입니다 (그러나 나는 오해 할 수 있음). 스레드 안전성을 보장하는'AFHTTPRequestOperationManager'에 관한 질문에 답해 주시면 질문을 받아 드리겠습니다. – Koen

+0

@Koen 예, 재산을 사용해야하는 좋은 이유입니다. 인수를 위해서, 당신은 서브 클래 싱을 사용할 수 있고 클래스 클러스터와 같은 일을 할 수 있습니다. 현재 iOS 버전에 따라 클래스가 다른 하위 클래스 인스턴스를 반환 할 수 있습니다. –

관련 문제