iOS 스레드에 대한 간단한 설명

  • 보통 메인 스레드와 다른 스레드의 사용 장면 메인 스레드는 UI 응답 사용자 작업 등 다른 스레드를 그리는 데 사용되며 네트워크에서 네트워크 반환을 요청하는 데 사용된다. Tips: 압축을 풀고 Zip 패키지를 열면 비교적 큰 파일을 읽고 쓰는 작업도 메인 스레드에 놓아서는 안 된다.

  • 일반적인 비동기 네트워크 요청에는 completion Block이 있습니다. 이 completion Block은 주 라인에서 호출됩니다.따라서 많은 시간을 소모할 수 있는 코드(예를 들어 위에서 언급한 Zip 패키지를 처리하는 방법)도 이런 Block에 넣는 것이 좋지 않다.다음 코드와 같습니다.
      [request setCompletionBlock:^{
        NSLog(@"Zip file downloaded.");
        NSData *data = [request responseData];
        [self processZip:data sourceURL:sourceURL]; // Ack - heavy work on main thread!
    }];
    

    , blcok , Grand Central Dispatch(GCD) , , GCD 。 , , dispatch_async, 。
    GCD , ,GCD ; GCD 。

    dispatch_async , dispatch , block。

    dispatch ( dispatch _create ), ( dispatch_get_main_queue)。

    dispatch (queue) , block 。 , (shared data)。
    : , dispatch 。 dispatch block, block 。

    • GCD

    dispatch_queue, dispatch queue

      // Add new instance variable
    dispatch_queue_t backgroundQueue;
    

    dispatch_queue_t : dispatch queue 。

    dispatch queue
    backgroundQueue = dispatch_queue_create("com.razeware.imagegrabber.bgqueue", NULL);
    dispatch queue, dispatch queue 。 null DISPATCH_QUEUE_SERIAL( null) DISPATCH_QUEUE_CONCURRENT。
    DISPATCH_QUEUE_SERIAL : block dispatch 。
    DISPATCH_QUEUE_CONCURRENT: block dispatch 。 , barrier block 。

    dispatch queue

      - (void)process {   
        dispatch_async(backgroundQueue, ^(void) {
            [self processHtml];
        });   
    }
    

    - (void)process [self processHtml]; processHTMl , dispatch_async processHtml backgroundQueue 。

    • NSOperations operation

    NSOperations GCD , NSOperation GCD。 NSOperation , operation, operation operation。 submit block operation queue 。

    Bingo!
    GCD 。

    좋은 웹페이지 즐겨찾기