日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS 多线程的一些总结

發布時間:2025/4/14 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.?

?

轉載于:https://www.cnblogs.com/chu888chu888/archive/2011/11/21/2256711.html

總結

以上是生活随笔為你收集整理的IOS 多线程的一些总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。