iOS多線程中的實(shí)際方案之一pthread

pthread(現(xiàn)在幾乎不用了)


pthread 是 POSIX 多線程開發(fā)框架,由于是跨平臺(tái)的 C 語言框架。


pthread代碼示例

// 創(chuàng)建線程,并且在線程中執(zhí)行 demo 函數(shù)
- (void)pthreadDemo {
    /**
     參數(shù):
     1> 指向線程標(biāo)識(shí)符的指針,C 語言中類型的結(jié)尾通常 _t/Ref,而且不需要使用 *
     2> 用來設(shè)置線程屬性
     3> 線程運(yùn)行函數(shù)的起始地址
     4> 運(yùn)行函數(shù)的參數(shù)

     返回值:
     - 若線程創(chuàng)建成功,則返回0
     - 若線程創(chuàng)建失敗,則返回出錯(cuò)編號(hào)
     */
    pthread_t threadId = NULL;
    NSString *str = @"Hello Pthread";
    // 這邊的demo函數(shù)名作為第三個(gè)參數(shù)寫在這里可以在其前面加一個(gè)&,也可以不加,因?yàn)楹瘮?shù)名就代表了函數(shù)的地址。
    int result = pthread_create(&threadId, NULL, demo, (__bridge void *)(str));

    if (result == 0) {
        NSLog(@"創(chuàng)建線程 OK");
    } else {
        NSLog(@"創(chuàng)建線程失敗 %d", result);
    }
    // pthread_detach:設(shè)置子線程的狀態(tài)設(shè)置為detached,則該線程運(yùn)行結(jié)束后會(huì)自動(dòng)釋放所有資源。
    pthread_detach(threadId);
}

// 后臺(tái)線程調(diào)用函數(shù)
void *demo(void *params) {
    NSString *str = (__bridge NSString *)(params);

    NSLog(@"%@ - %@", [NSThread currentThread], str);

    return NULL;
}

小結(jié)

  1. 在c語言中,沒有對(duì)象的概念,對(duì)象類型是以-t/Ref結(jié)尾的,并且聲明的似乎不需要用*。
  2. c語言中的void * 和OC的id是等價(jià)的。
  3. 內(nèi)存管理
  • 在 OC 中,如果是 ARC 開發(fā),編譯器會(huì)在編譯時(shí),根據(jù)代碼結(jié)構(gòu), 自動(dòng)添加 retain/release/autorelease。
  • 但是,ARC 只負(fù)責(zé)管理 OC 部分的內(nèi)存管理,而不負(fù)責(zé) C 語言 代碼的內(nèi)存管理。
  • 因此,開發(fā)過程中,如果使用的 C 語言框架出現(xiàn)retain/create/copy/new 等字樣的函數(shù),大多都需要 release,否則會(huì)出現(xiàn)內(nèi)存泄漏。
  1. 在混合開發(fā)時(shí),如果在 C 和 OC 之間傳遞數(shù)據(jù),需要使用 __bridge 進(jìn)行橋接,橋接的目的就是為了告訴編譯器如何管理內(nèi)存。
  2. 橋接的添加可以借助 Xcode 的輔助功能添加。
  3. MRC 中不需要使用橋接。
最后編輯于
?著作權(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)容

  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,594評(píng)論 0 6
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,251評(píng)論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景。SDWebImage的原...
    LZM輪回閱讀 2,120評(píng)論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,575評(píng)論 0 35
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,622評(píng)論 30 472

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