IOS 多線程 NSThread

來源:互聯網
上載者:User

IOS 多線程 NSThread
一個正在啟動並執行應用程式是一個進程,一個進程會預設開啟一個主線程,但是在主線程中的操作是串列的,也就是當有多個任務同時需要完成的時候,是按照順序一個個執行。因此,為了提高效率,會在進程中開啟多個線程,每個線程可以並行的執行不同的任務。   此外,在ios程式中,處理使用者觸摸事件、重新整理介面等操作是必須放到主線程中實現的,因此那些比較耗費資源的,比如從網路擷取資料、下載等操作可以放到子線程中,不然的話,很容易造成主線程阻塞,一旦主線程阻塞,就會出現卡頓的現象,影響使用者體驗。   在ios中,使用多線程有三種方式,分別是: (1)NSThread   NSThread是一種比較原始的使用線程的方式,它是輕量級的方式,與其他方式相比,能更直觀的控制線程對象。但是通過這種方式,需要管理線程的生命週期,如果想實現同步,還需要加鎖,會加大系統開銷。 (2)NSOperation和NSOperationQueue NSOperation以物件導向的方法封裝了需要執行的操作,然後將這個操作放到一個NSOperationQueue中非同步執行,不需要去管理線程與處理同步的問題。 (3)Grand Centeral Dispatch 簡稱GCD,是c語言的API。GCD中提供了一些新特性來實現裝置多核的並行編程。 在本篇文章,我們先來講解一下NSThread的使用。 NSThread NSThread是線程類,一個NSThread執行個體就代表是一個線程。 擷取主線程 代碼 NSThread *mainThread = [NSThread mainThread];擷取當前線程 代碼 NSThread *currentThread = [NSThread currentThread];NSThread建立 (1)動態方法:通過對象方法來建立線程,需要手動開啟線程   代碼  

//初始化線程NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(startThread:) object: @"ios"];thread1.name = @"thread1";//開啟線程[thread1 start]; 

 

通過開啟線程調用的方法 代碼  
-(void)startThread:(NSString *)parm{        NSThread *currentThread = [NSThread currentThread];        for (int i=0; i<10; i++) {        NSLog(@"參數為 %@, 當前的線程為 %@, 線程的名字為 %@",parm,currentThread,currentThread.name);    }} 

 

 (2)靜態方法:通過類方法開啟線程,系統自動調用 代碼 [NSThread detachNewThreadSelector:@selector(startThread:) toTarget:self withObject:@"jredu"];(3)隱式方法開啟線程 代碼 [self performSelectorInBackground:@selector(startThread:) withObject:@"apple"];暫停當前的線程 代碼  
//方法一[NSThread sleepForTimeInterval:2];//方法二NSDate *date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]];[NSThread sleepUntilDate:date];

 

在某個線程上執行操作 (1)在指定線程執行操作 代碼 [self performSelector:@selector(run) onThread:thread1 withObject:nil waitUntilDone:YES];(2)在主線程執行操作 代碼 [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];  (3)在當前線程執行操作 代碼 [self performSelector:@selector(run) withObject:nil]; 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.