iOS 면접 문제의 다선정은 무엇입니까?

면접관: 다선정에 대해 말씀해 주세요.
나: 다선정, 다선정이지...
만약 모두 이렇게 대답한다면, 얼마나 많은 사람들이 너를 원하겠니?
=====================================================
먼저 멀티스레드 사용 환경을 분석합니다.
멀티스레드 프로세싱에는 Core Data의 멀티스레드 액세스, UI의 병렬 그리기, 비동기식 네트워크 요청 및 런타임 메모리가 부족한 상황에서 큰 파일을 처리하는 방안 등이 포함됩니다.
그 다음으로 iOS가 제공하는 다중 스레드의 실현 방법을 각각 예로 들어 설명한다.
iOS는 다음 중앙 집중식 다중 스레드 구현 방식을 제공합니다.
1. NSOBjcet 구현
//             
    //   1:     (   )    
    //   2:       
    [self performSelectorInBackground:@selector(btnUpClicked:)withObject:nil];

2. NSThread 구현
//   :                  
//                 thread    :        
//   :                
    // NSThread              
    NSThread *thread = [[NSThread alloc]initWithTarget:selfselector:@selector(btnUpClicked:)object:nil];
    [thread start];
    [thread release];

3. NSOperation 구현
// NSOperation                
// NSOperation                              
//                (main      )

    MyOperation *operation = [[MyOperation alloc] init];
    [operation start];
    [operation release];
    
    //                  
//    NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#>]
    NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{
            //            
    }];
@implementation MyOperation

- (void)main
{
    // operation main          
    
    static int count = 0 ;
    
    for (int i = 0 ; i < 600000000; i ++) {
        count ++;
    }
    NSLog(@"%d", count);
    
    //               0    1  
    BOOL b = [NSThread isMainThread];
    NSLog(@"%d", b);
    
    NSThread *thread = [NSThread currentThread];
    NSLog(@"     :%@", thread);
    
}
@end

4.NSOperationQueue
    //     (NSOperationQueue)           
    
    MyOperation *op1 = [[MyOperation alloc] init];
    MyOperation *op2 = [[MyOperation alloc] init];
    MyOperation *op3 = [[MyOperation alloc] init];
    MyOperation *op4 = [[MyOperation alloc] init];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    //        
    [queue setMaxConcurrentOperationCount:2];
    
    [queue addOperation:op1];
    [queue addOperation:op2];
    [queue addOperation:op3];
    [queue addOperation:op4];
    
    //   :                                       
    //   :            

5.GCD
    // GCD               
    //      
    // 1.  :          Concurrent
    // 2.  :       (           ) Serial
    
    //         
    //   1:       
    //   2:        DISPATCH_QUEUE_CONCURRENT(  ) 
    dispatch_queue_attr_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
    
    //     
    //   1:          
    //   2:       
    dispatch_async(queue, ^{
        [self btnUpClicked:nil];
    });

고급 사용법:
    //      5   
    // 1.               :           
    
    //      
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    //         
//    dispatch_async(mainQueue, ^{
//        [self btnUpClicked:nil];
//    });
    
    
    // 2. 4      (    )
    //   1:         
    //   2:          0
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//    dispatch_async(globalQueue, ^{
//        [self btnUpClicked:nil];
//    });
    
    //     
    // 1.                       
//    dispatch_async(globalQueue, ^{
//       
//        //     (   )    
//        NSString *str = @"htt://www.baidu.com";
//        NSURL *url = [NSURL URLWithString:str];
//        
//        NSData *data = [NSData dataWithContentsOfURL:url];
//        UIImage *image = [UIImage imageWithData:data];
//        
//        //         UI/  UI
//        dispatch_async(mainQueue, ^{
//           
//            UIImageView *imageView = [[UIImageView alloc] init];
//            //      
//            imageView.image = image;
//            
//        });
//    });
    
    // 2.         
    //                 
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSLog(@"     ");
    });
    
    // 3.         (      )
    //   1:      
    //   2:        
    //   3:       
    dispatch_apply(4, globalQueue, ^(size_t a) {
        NSLog(@"%zu", a);
    });
    
    // 4.  
    //   1:     
    //   2:      
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"=====");
    });

GCD로 사람을 위협하는 것을 강력히 건의합니다.이것은 내가 말한 것이 아니라 그들이 정리한 것이다. 어쨌든 쓰기 좋으면 그만이다. 특히 면접관을 만나는 것은 iOS가 개발한 것이 아니다...왼쪽으로 끌고 GCD로 돌아가.한마디로 GCD 만세~

좋은 웹페이지 즐겨찾기