iOS 多線程(一)Pthread

pthread 是 iOS 多線程的底層實現方式(是POSIX多線程開發框架,是跨平臺的C語言框架),平時開發使用很少用到
代碼示例如下:

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

 返回值:
 - 若線程創建成功,則返回0
 - 若線程創建失敗,則返回出錯編號
 */
pthread_t threadId = NULL;
NSString *str = @"Hello Pthread";
// 這邊的demo函數名作爲第三個參數寫在這裏可以在其前面加一個&,也可以不加,因爲函數名就代表了函數的地址。
int result = pthread_create(&threadId, NULL, demo, (__bridge void *)(str));

if (result == 0) {
    NSLog(@"創建線程 OK");
} else {
    NSLog(@"創建線程失敗 %d", result);
}
// pthread_detach:設置子線程的狀態設置爲detached,則該線程運行結束後會自動釋放所有資源。
pthread_detach(threadId);

}

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

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

return NULL;

}

總結:
1.在C語言中,沒有對象的概念,對象類型是以 -t/Ref 結尾的,並且聲明不需要*
2.C語言中的void* 和OC中的id是等價的
3.內存管理

  1. 在oc中,如果是ARC開發 ,編譯器會在編譯時,根據代碼結構自動添加 retain release autorelease
  2. ARC只負責管理oc部分的內存管理,而不處理c語言代碼的內存管理
  3. 因此,開發過程中,如果使用的C語言框架出現retain create copy new 等字樣的函數,大多需要release,否則會出現內存泄漏

在混合開發時,如果在C和OC之間傳遞數據,需要使用 __bridge進行橋接,橋接的目的就是爲了告訴編譯器如何管理內存
橋接的添加可以藉助Xcode的輔助功能添加
MRC中不需要使用橋接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章