進程與線程,進程線程

來源:互聯網
上載者:User

進程與線程,進程線程
主線程裡面執行耗時操作會導致介面阻塞,所以一般把耗時操作放到子線程執行,例如網路請求、線程睡眠、負載檔案、大量運算。1、不要把耗時操作放到主線程。2、不要把修改頁面的代碼放到子線程(子線程修改頁面不會等到及時更新)
第一種開啟子線程的方法NSThread     //開啟一個子線程     [NSThread detachNewThreadSelector:@selector(createMouse)toTarget:selfwithObject:nil];
     //返回主線程     [selfperformSelectorOnMainThread:@selector(updateUI:)withObject:self.mousewaitUntilDone:NO];
第二種開啟子線程的方法GCDGrand Central Dispatch (GCD)是Apple開發的一個多核編程的解決方案,自己建立的線程隊列為串列隊列,擷取系統提供的線程隊列為並行隊列。    //開啟一個子線程
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
       
        NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:self.imagaPaths[indexPath.row]]];
        UIImage *image = [UIImageimageWithData:data];
       
        //返回主線程
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.imageView.image= image;
            [cell setNeedsLayout];
        });    });
第三種開啟子線程的方法NSOperation建立出來的線程隊列預設為並行隊列。- (void)viewDidLoad
{
    [super viewDidLoad];
   
    //方式一開啟一個線程
    NSOperation *op1 = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(newThreadAction)object:nil];
   
    //方式二開啟一個線程
    NSOperation *op2 = [NSBlockOperationblockOperationWithBlock:^{
        for (int i=0; i<5; i++) {
            [NSThread sleepForTimeInterval:.5];
            NSLog(@"線程2--%d",i);
        }
    }];
   
    //建立線程隊列,預設建立出來的線程隊列為並行隊列
    NSOperationQueue *myQueue = [[NSOperationQueuealloc]init];
    //設定最大同時執行的線程數量
    [myQueue setMaxConcurrentOperationCount:1];
    //給op1添加一個依賴依賴op2
    [op1 addDependency:op2];
    //將線程添加到隊列,線程添加到隊列後才會執行
    [myQueue addOperation:op1];
    [myQueue addOperation:op2];
}

- (void)newThreadAction{
    for (int i=0; i<5; i++) {
        [NSThread sleepForTimeInterval:.5];
        NSLog(@"線程1--%d",i);
    }}

GCD與NSOperation的區別1、GCD,代碼更簡潔,使用更加方便,GCD更加高效,因為屬於C語言的文法,更底層。2、NSOperation,靈活控制線程之間的關係,可以設定同時執行的線程數量。    //設定最大同時執行的線程數量,如果設定為1,則相當於線程串列執行    [myQueue setMaxConcurrentOperationCount:1];    //給op1添加一個依賴依賴op2,先執行op2,再執行op1    [op1 addDependency:op2]; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.