1. 程式人生 > >ios多執行緒的一些總結

ios多執行緒的一些總結

IOS 多執行緒 有三種主要方法 (1)NSThread (2)NSOperation (3)GCD

下面簡單介紹這三個方法 

1.NSThread

      呼叫方法如下: 

      如函式需要輸入引數,可從object傳進去。     (1) [NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];     (2) NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];  [myThread start];      (3) [obj performSelectorInBackground:@selector(threadMe) withObject:nil];

提個問題:如果某個ViewController裡運行了一個Thread,Thread還沒結束的時候,這個ViewController被Release了,結果會如何?

 

經過的的測試,Thread不結束,ViewController一直保留,不會執行dealloc方法。

2.NSOperation  

NSoperation也是多執行緒的一種,NSopertaion有2種形式   (1) 併發執行        併發執行你需要過載如下4個方法      //執行任務主函式,執行緒執行的入口函式     - (void)start         //是否允許併發,返回YES,允許併發,返回NO不允許。預設返回NO     -(BOOL)isConcurrent      - (BOOL)isExecuting      //是否已經完成,這個必須要過載,不然放在放在NSOperationQueue裡的NSOpertaion不能正常釋放。    - (BOOL)isFinished    比如TestNSOperation:NSoperaion 過載上述的4個方法,    宣告一個NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];   [queue addOperation:testNSoperation];

  它會自動呼叫TestNSOperation裡的 start函式,如果需要多個NSOperation,你需要設定queue的一些屬性,如果多個NSOperation之間又依賴關係,也可以設定,具體可以參考API 文件。 

(2)非併發執行   -(void)main    只需要過載這個main方法就可以了。  

  3.GCD

  GCD很強大,我的使用經驗很少。但是scorpiozj 總結的比較全面(http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html)

  同時,這篇文章也介紹的比較詳細 http://www.cnblogs.com/vinceoniphone/archive/2011/04/07/2007968.html 

     官方教程

GCD是和block緊密相連的,所以最好先了解下block(可以檢視這裡).GCD是C level的函式,這意味著它也提供了C的函式指標作為引數,方便了C程式設計師.

下面首先來看GCD的使用:

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

async表明非同步執行,block代表的是你要做的事情,queue則是你把任務交給誰來處理了.(除了async,還有sync,delay,本文以async為例).

之所以程式中會用到多線程是因為程式往往會需要讀取資料,然後更新UI.為了良好的使用者體驗,讀取資料的操作會傾向於在後臺執行,這樣以避免阻塞主執行緒.GCD裡就有三種queue來處理.

1. Main queue:

  顧名思義,執行在主執行緒,由dispatch_get_main_queue獲得.和ui相關的就要使用Main Queue.

2.Serial quque(private dispatch queue)

  每次執行一個任務,可以新增多個,執行次序FIFO. 通常是指程式設計師生成的,比如:

NSDate *da = [NSDate date];
NSString
*daStr = [da description];
const char *queueName = [daStr UTF8String];
dispatch_queue_t myQueue
= dispatch_queue_create(queueName, NULL);

3. Concurrent queue(global dispatch queue):

可以同時執行多個任務,每個任務的啟動時間是按照加入queue的順序,結束的順序依賴各自的任務.使用dispatch_get_global_queue獲得.

所以我們可以大致瞭解使用GCD的框架:

dispatch_async(getDataQueue,^{
//獲取資料,獲得一組後,重新整理UI. dispatch_aysnc (mainQueue, ^{
//UI的更新需在主執行緒中進行};
}
)

由此可見,GCD的使用非常簡單,以我的使用經驗來看,以後會逐步淘汰使用NSOperation而改用GCD. 

相關推薦

iOS 執行使用總結(很實用)

每次準備開始新的航行,總是要複習一遍演算法啊,多執行緒啊,記憶體管理啊之類的理論和應用知識,這次把他們整理成文件,方便以後的學習和不斷的積累進步。         多執行緒給我留下的是痛苦的記憶,當時在上家創業公司的最後階段,就是被Feature Phone上面的多執行緒方案導致bug叢生,搞的焦頭爛額。  

ios執行一些總結

IOS 多執行緒 有三種主要方法 (1)NSThread (2)NSOperation (3)GCD 下面簡單介紹這三個方法  1.NSThread       呼叫方法如下:        如函式需要輸入引數,可從object傳進去。     (1) [N

iOS開發執行學習總結 - GCD的使用

文章內容和排版參考: iOS 多執行緒: [GCD]詳盡總結 GCD - 核心概念:  任務 | 佇列 任務: 就是指需要執行的程式碼, 在block中編寫,有 同步執行 和 非同步執行 兩種方式. 

iOS 執行:『GCD』詳盡總結

本文用來介紹 iOS 多執行緒中 GCD 的相關知識以及使用方法。這大概是史上最詳細、清晰的關於 GCD 的詳細講解+總結的文章了。通過本文,您將瞭解到: 1. GCD 簡介 2. GCD 任務和佇列 3. GCD 的使用步驟 4. GCD 的基本使用(6種不同組合區別) 5. GCD 執行緒間的通訊

iOS沉思錄】NSThread、GCD、NSOperation執行程式設計總結

OC中的多執行緒 OC中多執行緒根據封裝程度可以分為三個層次:NSThread、GCD和NSOperation,另外由於OC相容C語言,因此仍然可以使用C語言的POSIX介面來實現多執行緒,只需引入相應的標頭檔案:#include <pthrea

Linux執行學習總結

原文:https://www.cnblogs.com/luoxn28/p/6087649.html Linux多執行緒學習總結   執行緒是程式中完成一個獨立任務的完整執行序列,即一個可排程的實體;程序相當於執行中程式的一種抽象。根據執行環境的排程者的身份,執行緒可分為核心執行緒和使用者執行

執行學習總結(二)

一、多執行緒帶來的問題 (一)活躍性問題 死鎖:兩個執行緒相互等待對方釋放資源 飢餓: 多執行緒併發時優先順序低的執行緒永遠得不到執行;執行緒被永久阻塞在一個等待進入同步塊的狀態;等待的執行緒永遠不被喚醒 活鎖:活鎖指的是任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致

執行學習總結——鎖

何為同步?JVM規範規定JVM基於進入和退出Monitor物件來實現方法同步和程式碼塊同步,但兩者的實現細節不一樣。程式碼塊同步是使用monitorenter和monitorexit指令實現,而方法同步是使用另外一種方式實現的,細節在JVM規範裡並沒有詳細說明,但是方法的同步同樣可以使用這兩個指令來

執行學習總結(一)

一、程序和執行緒的定義 程序:程序是資源(CPU、記憶體等)分配的基本單位,它是程式執行時的一個例項。程式執行時系統就會建立一個程序,併為它分配資源,然後把該程序放入程序就緒佇列,程序排程器選中它的時候就會為它分配CPU時間,程式開始真正執行。 執行緒:執行緒是程式執行時的最小單位,它是程序

IOS執行之NSoperation和GCD的比較

GCD是基於c的底層api,NSOperation屬於object-c類。iOS首先引入的是NSOperation,IOS4之後引入了GCD和NSOperationQueue並且其內部是用gcd實現的。 相對於GCD: 1,NSOperation擁有更多的函式可用,具體檢視api。

java執行--練習題總結

目錄   練題1:編寫程式實現,子執行緒迴圈3次,接著主執行緒迴圈5次,接著再子執行緒迴圈3次,主執行緒迴圈5次,如此反覆,迴圈3次. 練習題2:設計四個執行緒,其中兩個執行緒每次對變數i加1,另外兩個執行緒每次對i減1. 練習題3:自己編寫程式碼,實現生產者-消費者模

iOS執行整理 (精)

知識點梳理 1.執行緒程序的區別: > 程序:應用程式的例項 > 執行緒:任務排程的基本單元 2.佇列種類: 序列佇列、併發佇列、主佇列(有經過特殊處理的序列佇列)、全域性佇列(屬於併發佇列) > 序列佇列:佇列中的任務按順序一個一個執行,任務的執行必

iOS 執行 NSOperation、NSOperationQueue

1. NSOperation、NSOperationQueue 簡介 NSOperation、NSOperationQueue 是蘋果提供給我們的一套多執行緒解決方案。實際上 NSOperation、NSOperationQueue 是基於 GCD 更高一層的封裝,完全面向物件。但是比 G

執行學習總結

只有一條執行路基的程式是單執行緒程式 有多條則為多執行緒  多程序意義:  增加cpu使用率,可以同一時間段內執行多個任務.  cpu某一個時間點只能做一件事情,只不過cpu在做程式間的高效切換   一個程序內多個任務,這個任務就是執行緒

#Java執行知識點總結wait、notify、notifyAll

Java多執行緒 設計一個典型的場景,來闡述wait()、notify()、notifyAll(),生產消費者。 有生產者、消費者、緩衝佇列(size=10)。 生產者不停地向緩衝佇列裡放資料,一旦佇列滿了,則wait(),並notify()消費者進行處理。 消費者不停地從緩衝佇列裡

面試系列-40個Java執行問題總結

前言 這篇文章主要是對多執行緒的問題進行總結的,因此羅列了40個多執行緒的問題。 這些多執行緒的問題,有些來源於各大網站、有些來源於自己的思考。可能有些問題網上有、可能有些問題對應的答案也有、也可能有些各位網友也都看過,但是本文寫作的重心就是 所有的問題都會按照自己的理解

java ftp支援 執行與否總結

問題發生的直觀描述:在使用者用Bootstarp Fileinput通過非同步的方式上傳多張圖片檔案至ftp時出現檔案有的成功,有的失敗。完全隨機的。 debug結論:在FtpClient.storeFile()時報connect is not open 的IO異常有的還有connect

【Java執行併發總結】Thread類的常用方法(join、yield等)---執行的基礎操作篇

 啟動(start)   最基本的操作,呼叫Runnable中的run方法,無返回值。 new Thread(new Test()).start(); 休眠(sleep)  使當前執行緒休眠一段時間,預設為毫秒級,最高可以精確到納秒,呼叫的方法為slee

java值執行總結

java多執行緒的放肆有四種 1.繼承Thread類,重寫run方法。 2.實現Runnable介面,重寫run方法,實現Runnable介面的實現類例項物件作為Thread構造器函式的target. 3.通過Callable和FutureTask建立執行緒。 4.建立執行緒

java執行知識總結

程序:一個程序包括由作業系統分配的記憶體空間,包含一個或多個執行緒。一個執行緒不能獨立的存在,它必須是程序的一部分。一個程序一直執行,直到所有的非守護執行緒都結束執行後才能結束。 多執行緒能滿足程式設計師編寫高效率的程式來達到充分利用 CPU 的目的。 詳細解釋: 程式:為了完成特定任務