9 multithreading(다중 스레드)/NSURLSession(세션) - 스탠퍼드 iOS
1. 지정된 대기열에서 Block 실행
dispatch_queue_t queue = ....;
dispatch_async(queue,^{});
2. 홈팀을 얻는 2가지 방법
dispatch_queue_t mainQ = dispatch_get_main_queue(); //
NSOperationQueue *mainQ = [NSOperationQueue mainQueue]; // oc API
3. 큐 만들기
dispatch_queue_t otherQ = dispatch_queue_create("name",NULL); // const char * , , NULL
- (void)performSelectorOnMainThread:(SEL)aMethod withObject:(id)obj waitUntilDone:(BOOL)waitUntilDone;
dispatch_async(dispatch_get_main_queue(),^{ /* call aMethod */ });
NSURLSession을 만드는 방법은 코드가 실행될 스레드 큐를 결정합니다.
4. URL을 통한 데이터 다운로드, NSURLSession 사용 지침 및 워크플로우
NSURLSession에서 제공하는 기능: 1.URL을 통해 데이터를 메모리로 다운로드합니다. 2.URL을 통해 파일 시스템에 데이터를 다운로드합니다. 3.지정된 URL에 데이터 업로드 4.백그라운드에서 상술한 기능을 완성하다
NSURLSession으로 데이터를 전송하는 4단계:
1. NSURLSessionConfiguration(세션 구성기)을 생성하여 NSSession(세션)에 대한 작업 모드를 설정합니다.
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
작업 모드는 다음과 같습니다.
2. 지정된 세션 구성기로 세션을 생성하고 실행 중인 네트워크 스레드를 선택하면 두 가지 생성 방법이 있습니다.
//1.sessionWithConfiguration:
//2.sessionWithConfiguration:delegate:delegateQueue:
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration ];
첫 번째는 방금 만든 Configuration에 따라 세션을 만드는 것입니다. 시스템은 기본적으로 새로운 OperationQueue (대기열) 를 만들어서 세션 메시지를 처리합니다.
두 번째는 리셋을 설정할 수 있는 delegate (이 리셋 delegate가 강제로 인용될 수 있음을 주의하십시오), 그리고 리셋을 어느 OperationQueue (대기열) 에서 설정할 수 있습니다. 만약 우리가 그것을 [NSOperationQueue mainQueue] 로 설정하면 메인 라인에서 리셋을 매우 편리하게 할 수 있습니다.
3. 세션 (세션) 의 세션 방법을 호출하여 Request 요청을 실행하고, Request가 필요하면task로 돌아갑니다.
기능에 따라task에는 세 가지 피드류가 있는데 그것이 바로 NSURLSessionUploadTask: 업로드용Task입니다. 업로드가 끝난 후에 다시 결과를 다운로드하지 않습니다.NSURLSessionDownloadTask: 다운로드용Task;NSURLSessionDataTask: 컨텐트를 업로드하고 업로드가 완료되면 다운로드할 수 있습니다.
4. 받은 Task 에서 resume를 호출하여 작업을 시작합니다.
5. 코드 인스턴스
/*
:
1. NSURLRequest ( NSURLReauest )
2. NSURLSession ( )
3. session request
*/
//1. URL
NSURLRequest *request = [NSURLRequest requestWithURL:self.imageURL];
//2. NSURLSessionConfiguration( ), " "
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
//3. " " , , sessionWithConfiguration
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration ];
//4. session request ( )
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request
completionHandler:^(NSURL *localfile, NSURLResponse *response, NSError *error) {
if (!error) {
if ([request.URL isEqual:self.imageURL]) {
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:localfile]];
dispatch_async(dispatch_get_main_queue(), ^{ self.image = image; });
}
}
}];
[task resume]; // task
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.