iOS 개발 멀티스레드 – 스레드 생성

3418 단어
스레드 시작 스레드를 만드는 간단한 설명
  • 하나의 NSThread 객체는 하나의 스레드 생성, 부팅 스레드
  • 를 나타냅니다.
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];
    [thread start];
    //      ,     thread   self run  
    //   object     run      
    
  • 메인 스레드 관련 용법
  •   + (NSThread *)mainThread; //      
    
      - (BOOL)isMainThread; //       
    
      + (BOOL)isMainThread; //       
    
  • 기타 용법으로 현재 스레드 획득
  • NSThread *current = [NSThread currentThread];
    
  • 라인의 스케줄링 우선순위: 스케줄링 우선순위의 수치 범위는 0.0~1.0이고 기본 0.5이며 값이 클수록 우선순위가 높다
  •  + (double)threadPriority;
     + (BOOL)setThreadPriority:(double)p;
    
  • 설정 라인의 이름
  •  - (void)setName:(NSString *)n;
     - (NSString *)name;
    
  • 기타 스레드를 만드는 방식, 스레드를 만든 후 자동으로 스레드를 시작합니다
  •  [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
    
  • 스텔스 생성 및 시작 루트
  •  [self performSelectorInBackground:@selector(run) withObject:nil];
    

    상기 2가지 라인 생성 방식의 장단점 장점: 간단하고 빠른 단점: 라인에 대해 더 자세한 설정을 할 수 없음
    다음은 코드 예입니다.
  • NSThread를 사용한 스레드 생성:
  • @interface ViewController ()
    @property(nonatomic,strong)UIButton * button;
    @end
    @implementation ViewController
     - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view addSubview:self.button];
    }
     - (UIButton *)button
    {
        if (_button == nil) {
            _button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
            _button.backgroundColor = [UIColor brownColor];
            [_button addTarget:self  action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
        }
        return _button;
    }
     - (void)buttonClick
    {
        //      
       NSThread *current=[NSThread currentThread];
       //   
           NSLog(@"     ----%@",current);
        //            
       NSThread *main=[NSThread mainThread];
          NSLog(@"   -------%@",main);
             //        
        [self creatNSThread];
        //    [self creatNSThread2];
       //    [self creatNSThread3];
    }
      /**
      * NSThread      1
      * 1>         
      * 2> start    
      */
      - (void)creatNSThread
    {
         NSThread  *thread=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"  A"];
         //         
        thread.name=@"  A";
          //    
         [thread start];
        NSThread  *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"  B"];
         //         
        thread2.name=@"  B";
       //    
        [thread2 start];
    }
     /**
      * NSThread      2
      *       (  )  
      */
     - (void)creatNSThread2
     {
    //    NSThread *thread=[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"       (  )  "];
        
             [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"       (  )  "];
    }
      /**
      * NSThread      3
      *       ,     (  )  
      */
      - (void)creatNSThread3
     {
            //        ===       
            [self performSelectorInBackground:@selector(run:) withObject:@"    "];
     }
      - (void)run:(NSString *)str
     {
            //      
             NSThread *current=[NSThread currentThread];
             //    
            for (int i=0; i<10; i++) {
                 NSLog(@"run---%@---%@",current,str);
        }
    }
     - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    }
    @end
    

    이 코드들의 운행 결과를 스스로 시험해 보아라

    좋은 웹페이지 즐겨찾기