ios多執行緒的一些總結
下面簡單介紹這三個方法
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 文件。
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 的目的。 詳細解釋: 程式:為了完成特定任務