iOS多線程開發之NSThread,ios多線程nsthread

來源:互聯網
上載者:User

iOS多線程開發之NSThread,ios多線程nsthread
一、NSThread基本概念

      NSThread是基於線程使用,輕量級的多線程編程方法(相對GCD和NSOperation),一個NSThread對象代表一個線程,需要手動管理線程的生命週期,處理線程同步等問題。

 二、建立、啟動線程

      1、動態執行個體化 - 先建立再人工啟動

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadingImage) object:nil];// 線程啟動,線上程thread中執行self的loadingImage方法[thread start];   

      2、靜態執行個體化 - 建立後自啟動

// 建立自啟動,執行loadingImage方法[NSThread detachNewThreadSelector:@selector(loadingImage) toTarget:self withObject:nil];

      3、隱式執行個體化 - 建立後自啟動

// 建立自啟動,執行loadingImage方法[self performSelectorInBackground:@selector(loadingImage) withObject:nil];
 三、線程式控制制

     1、暫停 

+ (void)sleepUntilDate:(NSDate *)date;+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

      NSThread的暫停會阻塞當前線程  

      2、取消

- (void)cancel

      NSThread的取消線程並不是馬上停止並退出線程,只作(線程是否需要退出)狀態標記

     3、線程停止

+ (void)exit

     NSThread的停止方法會立即終止除主線程以外所有線程(無論是否在執行任務)並退出,慎用! 否則可能會導致記憶體問題

 四、NSThread的拓展認識

      1、一些常用方法

// 獲得主線程+ (NSThread *)mainThread;    // 判斷是否為主線程(對象方法)- (BOOL)isMainThread;// 判斷是否為主線程(類方法)+ (BOOL)isMainThread;    // 獲得當前線程NSThread *current = [NSThread currentThread];

     2、線程優先順序設定

//iOS8之前[NSThread setThreadPriority:1.0];  // (0.0,-1.0,1.0) -----------------------------分割線------------------------------//iOS8之後[NSThread setQualityOfService:NSQualityOfServiceUserInitiated];/*  qualityOfService的枚舉值如下: NSQualityOfServiceUserInteractive:最高優先順序,用於使用者互動事件 NSQualityOfServiceUserInitiated:次高優先順序,用於使用者需要馬上執行的事件 NSQualityOfServiceDefault:預設優先順序,主線程和沒有設定優先權的線程都預設為這個優先順序 NSQualityOfServiceUtility:普通優先順序,用於普通任務 NSQualityOfServiceBackground:最低優先順序,用於不重要的任務*/

     3、線程間的通訊

// 1、指定當前線程執行操作[self performSelector:@selector(run)];[self performSelector:@selector(run) withObject:nil];[self performSelector:@selector(run) withObject:nil afterDelay:3.0f];-----------------------------分割線------------------------------------------// 2、指定在主線程執行操作(如更新UI)[self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];-----------------------------分割線------------------------------------------// 3、指定在其他線程操作(主線程->新線程)// 這裡指定為某個線程newThread[self performSelector:@selector(run) onThread:newThread withObject:nil waitUntilDone:YES]; // 這裡指定為後台線程[self performSelectorInBackground:@selector(run) withObject:nil];
 五、線程同步

      多線程不可避免的會帶來不同線程並發執行時爭奪共用資源的問題(如記憶體,資料來源等),這會造成資料的不一致(髒資料),甚至嚴重的引起死結。

      線程同步是指是指在一定的時間內只允許某一個線程訪問某個資源,這就像是GCD裡的柵欄(dispatch_barrier)或者訊號量(dispatch_semphore)一樣。

      目前iOS實現線程加鎖有NSLock和@synchronized兩種方式

      關於線程鎖的更多相關知識,請參考文章:http://www.jianshu.com/p/35dd92bcfe8c

   

 

相關文章

聯繫我們

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