__bridge - 橋接

zhYx__發表於2017-10-08
  • 在ARC環境下,編譯器不會處理C語言申請的記憶體空間.
  • 在ARC環境下,當出現C語言和OC語言的混合開發時,需要實現資料型別的轉換,在資料型別轉換時還需要使用橋接,告訴編譯器記憶體管理方式.
舉例 : 
- (void)pthreadDemo {
    // 新執行緒的標示符
    pthread_t ID;

    // 定義非同步函式的引數
    // char *cStr = "hello";
    NSString *ocStr = @"hello";

    // 建立子執行緒 : C和OC的混編,資料型別轉換結束後使用__bridge標記,告訴編譯器記憶體管理方式
    int result = pthread_create(&ID, NULL, demo, (__bridge void *)(ocStr));
    // 判斷建立子執行緒是否成功
    if (result == 0) {
        NSLog(@"子執行緒建立成功");
    } else {
        NSLog(@"子執行緒建立失敗");
    }
}

/// 子執行緒執行的函式
void *demo(void *param) {
    // 接收外界傳入的引數 : C和OC的混編,資料型別轉換結束後使用__bridge標記,告訴編譯器記憶體管理方式
    NSString *str = (__bridge NSString *)(param);
    NSLog(@"demo = %@ %@",str,[NSThread currentThread]);

    return NULL;
}

相關文章