最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS多線程開發(fā)——NSThread淺析

 更新時間:2016年05月09日 10:03:35   作者:乞力馬扎羅的雪雪  
這篇文章主要介紹了 iOS多線程開發(fā)——NSThread淺析,需要的朋友可以參考下

  在iOS開發(fā)中,多線程的實(shí)現(xiàn)方式主要有三種,NSThread、NSOperation和GCD,我前面博客中對NSOperation和GCD有了較為詳細(xì)的實(shí)現(xiàn),為了學(xué)習(xí)的完整性,今天我們主要從代碼層面來實(shí)現(xiàn)NSThread的使用。案例代碼上傳至 https://github.com/chenyufeng1991/NSThread。

(1)初始化并啟動一個線程

  - (void)viewWillAppear:(BOOL)animated
  {
  [super viewWillAppear:animated];
  //獲取當(dāng)前線程
  NSThread *current = [NSThread currentThread];
  NSLog(@"當(dāng)前線程為 %@",current);
  //初始化線程
  NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
  //設(shè)置線程的優(yōu)先級(0.0-1.0)
  thread.threadPriority = 1.0;
  thread.name = @"新線程1";
  [thread start];
  }
  - (void)run
  {
  NSLog(@"線程執(zhí)行");
  //獲取當(dāng)前線程
  NSThread *current = [NSThread currentThread];
  NSLog(@"當(dāng)前線程為 %@",current);
  //線程休眠,可以模擬耗時操作
  [NSThread sleepForTimeInterval:2];
  //獲取主線程
  NSThread *mainThread = [NSThread mainThread];
  NSLog(@"子線程中獲得主線程 %@",mainThread);
  }

  其中currentThread,這個方法很有用,常??梢杂脕砼袛嗄撤椒ǖ膱?zhí)行是在哪個線程中。

  (2)NSThread可以指定讓某個線程在后臺執(zhí)行:


  //后臺創(chuàng)建一個線程來執(zhí)行任務(wù),需要在調(diào)用的方法中使用自動釋放池

  [self performSelectorInBackground:@selector(run3) withObject:nil];

  - (void)run3

  {

  @autoreleasepool {

  NSLog(@"主線程3:%@,當(dāng)前線程3:%@",[NSThread mainThread],[NSThread currentThread]);

  }

  }

(3)子線程執(zhí)行耗時操作,主線程更新UI。這是多線程開發(fā)中最常用的案例。子線程中調(diào)用performSelectorOnMainThread方法用來更新主線程。

//測試在子線程中調(diào)用主線程更新UI
- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];

 NSThread *subThread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
 //NSThread可以控制線程開始
 [subThread start];
}

- (void)run
{
 NSLog(@"主線程1:%@,當(dāng)前線程1:%@",[NSThread mainThread],[NSThread currentThread]);
 //以下方法需要在子線程中調(diào)用
 [self performSelectorOnMainThread:@selector(invocationMainThread) withObject:nil waitUntilDone:YES];
}

- (void)invocationMainThread
{
 NSLog(@"主線程2:%@,當(dāng)前線程2:%@",[NSThread mainThread],[NSThread currentThread]);
 NSLog(@"調(diào)用主線程更新UI");
}

  (4)同樣,我們也可以新建一個子線程的類,繼承自NSThread. 然后重寫里面的main方法,main方法就是該線程啟動時會執(zhí)行的方法。

@implementation MyThread

- (void)main
{
 NSLog(@"main方法執(zhí)行");
}

@end

  然后按正常的創(chuàng)建啟動即可。線程就會自動去執(zhí)行main方法。

//可以自己寫一個子類,繼承自NSThread,需要重寫main方法
/**
 * 執(zhí)行的代碼是在main中的,而不是使用@selector.
 使用main方法,線程中執(zhí)行的方法是屬于對象本身的,這樣可以在任何其他需要使用這個線程方法的地方使用,而不用再一次實(shí)現(xiàn)某個方法。
 
 而其他的直接NSThread的創(chuàng)建線程,線程內(nèi)執(zhí)行的方法都是在當(dāng)前的類文件里面的。
 */
- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];

 MyThread *thread = [[MyThread alloc] init];
 [thread start];
}

  (5)NSThread中還有一個很常用的方法就是延遲。延遲2s執(zhí)行。

 //線程休眠,可以模擬耗時操作
 [NSThread sleepForTimeInterval:2];

   對于多線程的三種實(shí)現(xiàn)方式,我們都要能夠熟練使用

相關(guān)文章

  • iOS自定義水平滾動條、進(jìn)度條

    iOS自定義水平滾動條、進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了iOS自定義水平滾動條、進(jìn)度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 解決Xcode8打包上傳構(gòu)建版本無效的辦法

    解決Xcode8打包上傳構(gòu)建版本無效的辦法

    這篇文章主要介紹的是自己在打包上傳項(xiàng)目的時候遇到的一個問題,通過自己的努力一步步解決了,現(xiàn)將解決方法方法分享給大家,希望給同樣遇到這個問題的朋友們能有所幫助,下面來一起看看吧。
    2016-09-09
  • iOS開發(fā)實(shí)現(xiàn)下載器的基本功能(1)

    iOS開發(fā)實(shí)現(xiàn)下載器的基本功能(1)

    這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)下載器基本功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS11上Xcode9 AppIcon 圖標(biāo)不顯示

    iOS11上Xcode9 AppIcon 圖標(biāo)不顯示

    升級到iOS11系統(tǒng)下自己的項(xiàng)目桌面app圖標(biāo)不見了,是什么原因呢,經(jīng)過一番查找,終于發(fā)現(xiàn)問題所在,現(xiàn)在分享給大家
    2017-11-11
  • IOS 照片操作(獲取信息及修改照片)詳解

    IOS 照片操作(獲取信息及修改照片)詳解

    這篇文章主要介紹了IOS 照片操作及獲取拍照信息和修改信息的相關(guān)資料,這里主要介紹,獲取系統(tǒng)照片信息,及地理位置和時間的修改,需要的朋友可以參考下
    2016-11-11
  • 淺析iOS中視頻播放的幾種方案

    淺析iOS中視頻播放的幾種方案

    還記得剛學(xué)iOS的時候嗎?那個時候驚訝于各種牛逼的功能只需要幾句簡單的代碼就可以完成。視頻播放也是這樣,IOS中視頻播放有好幾種方式,這篇文章就給大家整理這幾種方案優(yōu)缺點(diǎn)與實(shí)現(xiàn)過程。
    2016-08-08
  • iOS百度地圖簡單使用詳解

    iOS百度地圖簡單使用詳解

    百度地圖的功能有很多,本篇文章主要介紹了iOS百度地圖簡單使用詳解,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • Swift中的HTTP請求體Request Bodies使用示例詳解

    Swift中的HTTP請求體Request Bodies使用示例詳解

    這篇文章主要為大家介紹了Swift中的HTTP請求體Request Bodies使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 利用iOS手勢與scrollView代理實(shí)現(xiàn)圖片的放大縮小

    利用iOS手勢與scrollView代理實(shí)現(xiàn)圖片的放大縮小

    這篇文章主要介紹了利用iOS的手勢、scrollView代理來實(shí)現(xiàn)圖片放大縮小的方法,文中通過示例代碼介紹的很詳細(xì),相信對各位iOS開發(fā)者們來說具有一定的參考借鑒價值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • iOS NSTimer循環(huán)引用的幾種解決辦法

    iOS NSTimer循環(huán)引用的幾種解決辦法

    本篇文章主要介紹了iOS NSTimer循環(huán)引用的幾種解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論

潢川县| 岳西县| 玉树县| 衡阳市| 阳谷县| 巍山| 隆林| 天等县| 酒泉市| 达州市| 射阳县| 安庆市| 榕江县| 同仁县| 双辽市| 武城县| 清水县| 探索| 秀山| 正宁县| 泾川县| 革吉县| 白银市| 元氏县| 白城市| 新丰县| 沂南县| 甘洛县| 荔浦县| 衢州市| 柯坪县| 岱山县| 伽师县| 绥棱县| 宕昌县| 双辽市| 耒阳市| 巨鹿县| 浏阳市| 丹凤县| 和林格尔县|