iOS開發 - 多線程實現方案之Pthread篇


pthread基礎

pthread是POSIX thread的簡寫,一套通用的多線程API,適用於Unix、Linux、Windows等系統,跨平台、可移植,使用難度大,C語言框架,線程生命周期由程序員管理,百度百科上有詳細的介紹,去查看,由於iOS開發幾乎用不到,以下就簡單運用pthread開啟一個子線程,用來處理耗時操作

pthread創建子線程步驟

1.導入頭文件

#import <pthread.h>

2.pthread創建子線程

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /**
     說明:
     1.在c語言中,沒有對象的概念,對象類型是以-t/Ref結尾的;
     2.c語言中的void * 和OC的id是等價的;
     3.在混合開發時,如果在 C 和 OC 之間傳遞數據,需要使用 __bridge 進行橋接,橋接的目的就是為了告訴編譯器如何管理內存,MRC 中不需要使用橋接;
     4.在 OC 中,如果是 ARC 開發,編譯器會在編譯時,根據代碼結構, 自動添加 retain/release/autorelease。但是,ARC 只負責管理 OC 部分的內存管理,而不負責 C 語言 代碼的內存管理。因此,開發過程中,如果使用的 C 語言框架出現retain/create/copy/new 等字樣的函數,大多都需要 release,否則會出現內存泄漏
     */
    
    //1.創建線程對象
    pthread_t thread;
    
    //2.創建線程
    NSString *param = @"參數";
    int result = pthread_create(&thread, NULL, task, (__bridge void *)(param));
    result == 0?NSLog(@"success"):NSLog(@"failure");
    
    //3.設置子線程的狀態設置為detached,則該線程運行結束后會自動釋放所有資源,或者在子線程中添加 pthread_detach(pthread_self()),其中pthread_self()是獲得線程自身的id
    pthread_detach(thread);
    
    /**
    pthread_create(<#pthread_t  _Nullable *restrict _Nonnull#>, <#const pthread_attr_t *restrict _Nullable#>, <#void * _Nullable (* _Nonnull)(void * _Nullable)#>, <#void *restrict _Nullable#>)
     參數:
     1.指向線程標識符的指針,C 語言中類型的結尾通常 _t/Ref,而且不需要使用 *;
     2.用來設置線程屬性;
     3.指向函數的指針,傳入函數名(函數的地址),線程要執行的函數/任務;
     4.運行函數的參數;
     */

}

/**
 void *    (*)   (void *)
 返回值    函數名  函數參數
 */
void *task(void * param){
    
    //在此做耗時操作
    NSLog(@"new thread : %@  參數是: %@",[NSThread currentThread],(__bridge NSString *)(param));
    
    return NULL;
}

其他相關函數

pthread_t:線程ID
pthread_attr_t:線程屬性
pthread_create():創建一個線程
pthread_exit():終止當前線程
pthread_cancel():中斷另外一個線程的運行
pthread_join():阻塞當前的線程,直到另外一個線程運行結束
pthread_attr_init():初始化線程的屬性
pthread_attr_setdetachstate():設置脫離狀態的屬性(決定這個線程在終止時是否可以被結合)
pthread_attr_getdetachstate():獲取脫離狀態的屬性
pthread_attr_destroy():刪除線程的屬性
pthread_kill():向線程發送一個信號
pthread_equal(): 對兩個線程的線程標識號進行比較
pthread_detach(): 分離線程
pthread_self(): 查詢線程自身線程標識號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM