2014-07-07 2 views
1

내 응용 프로그램을 사용하면 사용자가 전자 상거래 사이트에 등록 할 항목을 만들 수 있습니다. 사용자는 저장소에 항목을 생성해야 할 때까지 이미지와 정보를 추가하는 여러 화면을 거칩니다.afyncing 비동기 백그라운드 작업은 viewcontroller가 변경 될 때 응답을 처리합니다.

1) 이미지 업로드 웹 서비스를 호출 일부 ID 년대를 반환

마지막 업로드 화면은 AFNetworking 그에게 전화하는 두 가지 서비스를 제공하고 있습니다 사용하여 UIViewController에 있습니다. 성공하면 호출합니다 (2).

2) 반환 된 ID를 요청의 일부로 사용하여 다른 서비스를 호출합니다.

이 프로세스는 사용자가 제출 단추를 누를 때 시작됩니다. 나는이 일이하고 싶은 무엇

은 다음

사용자가 클릭 제출 프로세스가 현재 스토리 보드 장면이 시작 화면으로 돌아갑니다 사용자가 이전하는 동안 다른 항목을 만들 수 있도록 백그라운드에서 시작 아직 실행 중입니다.

장면이 변경되면 UIViewController에 서비스 호출 및 응답을 처리하는 코드가 있으므로 UIViewController가 더 이상 스택에서 실행되지 않으므로 서비스 응답 등은 어떻게됩니까?

작업을 수행하기 위해 별도의 클래스를 생성하면 장면이 변경 될 때 객체 참조가 느슨해집니다. 메서드가 여전히 처리 중이면 가비지 수집됩니까?

그랜드 센트럴 디스패치를 ​​사용하여 백그라운드 스레드에이 작업을 수행해야합니까?

+0

왜 네트워크를 관리하는 별도의 클래스를 싱글 톤으로 설정하지 않습니까? 항상 객체 참조를 갖습니다. – Ryan

답변

1

자세한 내용은 다음 예를 참조하십시오.

나는 보통 네트워크와 관련된 모든 것을 관리하는 NetWrapper라는 클래스를 가지고있다. 이 같은 싱글 톤 클래스가있는 경우

@interface NetWrapper : NSObject 
+ (instancetype)shared; 

#pragma mark - APIs 
- (void)requestVersion; 
@end 

하는 .m

static NetWrapper *_netWrapper; 
@implementation NetWrapper 

+ (instancetype)shared 
{ 
    if(_netWrapper == nil) 
    { 
     _netWrapper = [[NetWrapper alloc] init]; 
    } 
    return _netWrapper; 
} 

#pragma mark - APIs 
- (void)requestVersion 
{ 
    // do something 
} 

, 당신과 같은 인스턴스가 항상 곁에 있습니다 .H

[NetWrapper shared] 

instan을 호출 ce 메소드를 호출합니다.

[[NetWrapper shared] requestVersion]; 
+0

정말 고마워요. 그게 실제로 제가 생각한 것 뿐이지 만, 객관적 c에 그것을 어떻게 적용 할 것인지 정확히 모르겠습니다. 답변에 노력을 감사드립니다! – sapatos

관련 문제