無標題文章

03-Pthread | NSThread

標簽: 面試基礎知識(多線程)


01-pthread的基本使用(需要包含頭文件)

    //使用pthread創(chuàng)建線程對象
    pthread_t thread;
    NSString *name = @"wendingding";
    //使用pthread創(chuàng)建線程
    //第一個參數(shù):線程對象地址
    //第二個參數(shù):線程屬性
    //第三個參數(shù):指向函數(shù)的指針
    //第四個參數(shù):傳遞給該函數(shù)的參數(shù)
    pthread_create(&thread, NULL, run, (__bridge void *)(name));

    pthread_exit(NULL); // 退出當前線程

02-NSThread的基本使用

(1)線程的創(chuàng)建

第一種創(chuàng)建線程的方式:alloc init.

    //特點:需要手動開啟線程,可以拿到線程對象進行詳細設置
        //創(chuàng)建線程
        /*
         第一個參數(shù):目標對象
         第二個參數(shù):選擇器,線程啟動要調用哪個方法
         第三個參數(shù):前面方法要接收的參數(shù)(最多只能接收一個參數(shù),沒有則傳nil)
         */
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"wendingding"];
         //啟動線程
        [thread start];

第二種創(chuàng)建線程的方式:分離出一條子線程

    //特點:自動啟動線程捶枢,無法對線程進行更詳細的設置
        /*
         第一個參數(shù):線程啟動調用的方法
         第二個參數(shù):目標對象
         第三個參數(shù):傳遞給調用方法的參數(shù)
         */
        [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"我是分離出來的子線程"];

第三種創(chuàng)建線程的方式:后臺線程

//特點:自動啟動縣城刹缝,無法進行更詳細設置
    [self performSelectorInBackground:@selector(run:) withObject:@"我是后臺線程"];

(2)設置線程的屬性

//設置線程的名稱
    thread.name = @"線程A";

//設置線程的優(yōu)先級,注意線程優(yōu)先級的取值范圍為0.0~1.0之間萤捆,1.0表示線程的優(yōu)先級最高,如果不設置該值姊舵,那么理想狀態(tài)下默認為0.5
    thread.threadPriority = 1.0;

(3) 線程的狀態(tài)(了解)

    //線程的各種狀態(tài):新建-就緒-運行-阻塞-死亡
    //常用的控制線程狀態(tài)的方法
    [NSThread exit];//退出當前線程
    [NSThread sleepForTimeInterval:2.0];//阻塞線程
    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];//阻塞線程
    //注意:線程死了不能復生

(4) 線程安全

  1. 前提:多個線程訪問同一塊資源會發(fā)生數(shù)據(jù)安全問題
  2. 解決方案:加互斥鎖
  3. 相關代碼:@synchronized(self){}
  4. 專業(yè)術語-線程同步
  5. 原子和非原子屬性(是否對setter方法加鎖)

(5) 線程間通信

    -(void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
    {
        //開啟一條子線程來下載圖片
        [NSThread detachNewThreadSelector:@selector(downloadImage) toTarget:self withObject:nil];
    }
    
    -(void)downloadImage
    {
        //1.確定要下載網(wǎng)絡圖片的url地址,一個url唯一對應著網(wǎng)絡上的一個資源
        NSURL *url = [NSURL URLWithString:@"http://p6.qhimg.com/t01d2954e2799c461ab.jpg"];
    
        //2.根據(jù)url地址下載圖片數(shù)據(jù)到本地(二進制數(shù)據(jù)
        NSData *data = [NSData dataWithContentsOfURL:url];
    
        //3.把下載到本地的二進制數(shù)據(jù)轉換成圖片
        UIImage *image = [UIImage imageWithData:data];
    
        //4.回到主線程刷新UI
        4.1 第一種方式
    //    [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];
    
        4.2 第二種方式
    //    [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
    
        4.3 第三種方式
        [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
    }

(6) 如何計算代碼段的執(zhí)行時間

第一種方法

        NSDate *start = [NSDate date];
        //2.根據(jù)url地址下載圖片數(shù)據(jù)到本地(二進制數(shù)據(jù))
        NSData *data = [NSData dataWithContentsOfURL:url];
    
        NSDate *end = [NSDate date];
        NSLog(@"第二步操作花費的時間為%f",[end timeIntervalSinceDate:start]);

第二種方法

        CFTimeInterval start = CFAbsoluteTimeGetCurrent();
        NSData *data = [NSData dataWithContentsOfURL:url];
    
        CFTimeInterval end = CFAbsoluteTimeGetCurrent();
        NSLog(@"第二步操作花費的時間為%f",end - start);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末彼硫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拧篮,老刑警劉巖词渤,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異串绩,居然都是意外死亡缺虐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門赏参,熙熙樓的掌柜王于貴愁眉苦臉地迎上來志笼,“玉大人,你說我怎么就攤上這事把篓∪依#” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵韧掩,是天一觀的道長紊浩。 經(jīng)常有香客問我,道長疗锐,這世上最難降的妖魔是什么坊谁? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮滑臊,結果婚禮上口芍,老公的妹妹穿的比我還像新娘。我一直安慰自己雇卷,他們只是感情好鬓椭,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著关划,像睡著了一般小染。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮折,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天裤翩,我揣著相機與錄音,去河邊找鬼调榄。 笑死踊赠,一個胖子當著我的面吹牛,可吹牛的內容都是我干的每庆。 我是一名探鬼主播臼疫,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扣孟!你這毒婦竟也來了烫堤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸽斟,沒想到半個月后拔创,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡富蓄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年剩燥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立倍。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灭红,死狀恐怖,靈堂內的尸體忽然破棺而出口注,到底是詐尸還是另有隱情变擒,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布寝志,位于F島的核電站娇斑,受9級特大地震影響,放射性物質發(fā)生泄漏材部。R本人自食惡果不足惜毫缆,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乐导。 院中可真熱鬧苦丁,春花似錦、人聲如沸物臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹦聪。三九已至账阻,卻和暖如春蒂秘,著一層夾襖步出監(jiān)牢的瞬間泽本,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工姻僧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留规丽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓撇贺,卻偏偏與公主長得像赌莺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子松嘶,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容

  • 概述 這篇文章中艘狭,我不會說多線程是什么、線程和進程的區(qū)別、多線程有什么用巢音,當然我也不會說什么是串行遵倦、什么是并行等問...
    hashakey閱讀 300評論 0 0
  • 【2017年最新】? iOS面試題及答案 設計模式是什么? 你知道哪些設計模式官撼,并簡要敘述梧躺? 設計模式是一種編碼經(jīng)...
    紫色冰雨閱讀 604評論 0 1
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,234評論 0 4
  • 大家好秃诵,我是IT修真院深圳分院第3期的學員续搀,一枚正直純潔善良的前端程序員,今天給大家分享一下顷链,修真院官網(wǎng)前端工程師...
    大大頭大閱讀 7,667評論 1 72
  • 為什么跑到這里目代? 因為不知道會不會遇見你。 如果剛好在這里遇到你嗤练, 那你會不會像我一樣在寫你榛了。 我不得不承認我已經(jīng)...
    夢想里有你閱讀 147評論 0 0