你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS 多線程 NSThread

IOS 多線程 NSThread

編輯:IOS開發綜合
一個正在運行的應用程序是一個進程,一個進程會默認開啟一個主線程,但是在主線程中的操作是串行的,也就是當有多個任務同時需要完成的時候,是按照順序一個個執行。因此,為了提高效率,會在進程中開啟多個線程,每個線程可以並行的執行不同的任務。     此外,在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]; 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved