pthread

pthread

  • pthreadPOSIX 多線程開發框架,由於是跨平臺的 C 語言框架,在蘋果的頭文件中並沒有詳細的註釋
  • 要查閱 pthread 有關資料,可以訪問 http://baike.baidu.com

導入頭文件

#import <pthread.h>

pthread演練

// 創建線程,並且在線程中執行 demo 函數
- (void)pthreadDemo {

    /**
     參數:
     1> 指向線程標識符的指針,C 語言中類型的結尾通常 _t/Ref,而且不需要使用 *
     2> 用來設置線程屬性
     3> 線程運行函數的起始地址
     4> 運行函數的參數

     返回值:
     - 若線程創建成功,則返回0
     - 若線程創建失敗,則返回出錯編號


     */
    pthread_t threadId = NULL;
    NSString *str = @"Hello Pthread";
    int result = pthread_create(&threadId, NULL, demo, (__bridge void *)(str));

    if (result == 0) {
        NSLog(@"創建線程 OK");
    } else {
        NSLog(@"創建線程失敗 %d", result);
    }
}

// 後臺線程調用函數
void *demo(void *params) {
    NSString *str = (__bridge NSString *)(params);

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

    return NULL;
}

小結

  1. 在 C 語言中,沒有對象的概念,對象是以結構體的方式來實現的
  2. 通常,在 C 語言框架中,對象類型以 _t/Ref 結尾,而且聲明時不需要使用 *
  3. C 語言中的 void * 和 OC 中的 id 是等價的
  4. 內存管理
    • 在 OC 中,如果是 ARC 開發,編譯器會在編譯時,根據代碼結構,自動添加 retain/release/autorelease
    • 但是,ARC 只負責管理 OC 部分的內存管理,而不負責 C 語言 代碼的內存管理
    • 因此,開發過程中,如果使用的 C 語言框架出現 retain/create/copy/new 等字樣的函數,大多都需要 release,否則會出現內存泄漏
  5. 在混合開發時,如果在 COC 之間傳遞數據,需要使用 __bridge 進行橋接,橋接的目的就是爲了告訴編譯器如何管理內存
  6. 橋接的添加可以藉助 Xcode 的輔助功能添加
  7. MRC 中不需要使用橋接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章