iOS知識(shí)點(diǎn)(二)

一.runloop跟線程的關(guān)系
  1. runloop是為線程而生,每一個(gè)線程會(huì)對(duì)應(yīng)一個(gè)runloop;
  2. 主線程runloop默認(rèn)是開啟的,子線程runloop需要手動(dòng)開啟;
    3.可通過以下方式開啟一條常駐線程:
NSRunLoop * runloop = [NSRunLoop currentRunLoop];
[runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[runloop run];
二. 線程之間的通信

1.GCD,一般用于UI更新

dispatch_async(dispatch_get_main_queue(), ^{
    //主線程操作UI更新
});
  1. performSelector
    a) performSelectorOnMainThread: withObject: waitUntilDone://切回主線程操作
    b) performSelectorInBackground: withObject: //切換到后臺(tái)線程
    c) performSelector: onThread: withObject: waitUntilDone://切換到自定義子線程
  2. NSOperation
    [NSOperationQueue mainQueue] addOperationWithBlock: ^{}
三. 線程鎖有幾種

1 NSLock
2 synchronized代碼塊
3 GCD的 dispatch_semaphore_t(條件信號(hào)量)和dispatch_barrier_async/dispatch_barrier_sync;
4 NSCondition 使用其做多線程之間的通信調(diào)用不是線程安全的
5 NSConditionLock 單純加鎖性能非常低,比NSLock低很多,但是可以用來做多線程處理不同任務(wù)的通信調(diào)用
6 POSIX(pthread_mutex) 底層的api,復(fù)雜的多線程處理建議使用,并且可以封裝自己的多線程
7 NSRecursiveLock 遞歸鎖的性能出奇的高,但是只能作為遞歸使用,所以限制了使用場景

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容