日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

IOS 多线程的一些总结

發(fā)布時間:2025/4/14 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS 多线程的一些总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
IOS 多線程 有三種主要方法 (1)NSThread (2)NSOperation (3)GCD

下面簡單介紹這三個方法?

?

1.NSThread

? ? ??調(diào)用方法如下:?

如函數(shù)需要輸入?yún)?shù),可從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還沒結(jié)束的時候,這個ViewController被Release了,結(jié)果會如何??

經(jīng)過的的測試,Thread不結(jié)束,ViewController一直保留,不會執(zhí)行dealloc方法。

?

2.NSOperation??

NSoperation也是多線程的一種,NSopertaion有2種形式 ? (1) 并發(fā)執(zhí)行 并發(fā)執(zhí)行你需要重載如下4個方法 //執(zhí)行任務(wù)主函數(shù),線程運行的入口函數(shù) - (void)start? //是否允許并發(fā),返回YES,允許并發(fā),返回NO不允許。默認返回NO -(BOOL)isConcurrent? - (BOOL)isExecuting //是否已經(jīng)完成,這個必須要重載,不然放在放在NSOperationQueue里的NSOpertaion不能正常釋放。 - (BOOL)isFinished 比如TestNSOperation:NSoperaion 重載上述的4個方法, 聲明一個NSOperationQueue, NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease]; [queue addOperation:testNSoperation];

? 它會自動調(diào)用TestNSOperation里的 start函數(shù),如果需要多個NSOperation,你需要設(shè)置queue的一些屬性,如果多個NSOperation之間又依賴關(guān)系,也可以設(shè)置,具體可以參考API 文檔。?

?

(2)非并發(fā)執(zhí)行 -(void)main 只需要重載這個main方法就可以了。 ?

?

??3.GCD

??GCD很強大,我的使用經(jīng)驗很少。但是scorpiozj 總結(jié)的比較全面(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的函數(shù),這意味著它也提供了C的函數(shù)指針作為參數(shù),方便了C程序員.

下面首先來看GCD的使用:

?

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

?

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

之所以程序中會用到多線程是因為程序往往會需要讀取數(shù)據(jù),然后更新UI.為了良好的用戶體驗,讀取數(shù)據(jù)的操作會傾向于在后臺運行,這樣以避免阻塞主線程.GCD里就有三種queue來處理.

1. Main queue:

  顧名思義,運行在主線程,由dispatch_get_main_queue獲得.和ui相關(guān)的就要使用Main Queue.

2.Serial quque(private dispatch queue)

  每次運行一個任務(wù),可以添加多個,執(zhí)行次序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):

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

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

?

dispatch_async(getDataQueue,^{
//獲取數(shù)據(jù),獲得一組后,刷新UI.
dispatch_aysnc (mainQueue, ^{
//UI的更新需在主線程中進行
};
}
)

?

由此可見,GCD的使用非常簡單,以我的使用經(jīng)驗來看,以后會逐步淘汰使用NSOperation而改用GCD.?

?

轉(zhuǎn)載于:https://www.cnblogs.com/chu888chu888/archive/2011/11/21/2256711.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。