美文网首页多线程 & 网络
iOS多线程:NSThread

iOS多线程:NSThread

作者: 码小菜 | 来源:发表于2020-04-28 09:38 被阅读0次
别墅

目录
一,线程创建
二,线程通信
三,线程状态

一,线程创建

1,实例方法

  • initWithTarget:
- (void)viewDidLoad {
    [super viewDidLoad];
 
    NSThread *thread = [[NSThread alloc] initWithTarget:self
                                               selector:@selector(performTask)
                                                 object:nil];
    [thread start];
}

- (void)performTask {
    NSLog(@"%s---%@", __func__, [NSThread currentThread]);
}

// 打印
-[ViewController performTask]---<NSThread: 0x60000072a700>{number = 6, name = (null)}
  • initWithBlock:
- (void)viewDidLoad {
    [super viewDidLoad];
 
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        NSLog(@"initWithBlock---%@", [NSThread currentThread]);
    }];
    [thread start];
}

// 打印
initWithBlock---<NSThread: 0x600002098e80>{number = 6, name = (null)}

2,类方法

  • detachNewThreadSelector:
- (void)viewDidLoad {
    [super viewDidLoad];
 
    [NSThread detachNewThreadSelector:@selector(performTask)
                             toTarget:self
                           withObject:nil];
}

- (void)performTask {
    NSLog(@"%s---%@", __func__, [NSThread currentThread]);
}

// 打印
-[ViewController performTask]---<NSThread: 0x6000037c50c0>{number = 6, name = (null)}
  • detachNewThreadWithBlock:
- (void)viewDidLoad {
    [super viewDidLoad];
 
    [NSThread detachNewThreadWithBlock:^{
        NSLog(@"detachNewThreadWithBlock---%@", [NSThread currentThread]);
    }];
}

// 打印
detachNewThreadWithBlock---<NSThread: 0x600001e4b640>{number = 6, name = (null)}
二,线程通信
- (void)viewDidLoad {
    [super viewDidLoad];
 
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        // 保证线程不退出
        [[NSRunLoop currentRunLoop] run];
    }];
    [thread start];
    
    [self performSelector:@selector(requestData)
                 onThread:thread
               withObject:nil
            waitUntilDone:NO]; // 在任务执行完毕之前是否阻塞当前线程
}

- (void)requestData {
    NSLog(@"在子线程请求数据---%@", [NSThread currentThread]);
    [self performSelectorOnMainThread:@selector(refreshUI)
                           withObject:nil
                        waitUntilDone:NO];
}

- (void)refreshUI {
    NSLog(@"回主线程刷新UI---%@", [NSThread currentThread]);
}

// 打印
在子线程请求数据---<NSThread: 0x60000192cb40>{number = 7, name = (null)}
回主线程刷新UI---<NSThread: 0x600001952140>{number = 1, name = main}
三,线程状态

1,图解

线程状态

2,代码

- (void)viewDidLoad {
    [super viewDidLoad];
 
    NSLog(@"1---新建");
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        NSLog(@"3---运行");
        
        NSLog(@"执行任务中...");
        
        NSLog(@"4---阻塞");
        [NSThread sleepForTimeInterval:3.0];
        NSLog(@"5---就绪");
        NSLog(@"6---运行");
        
        NSLog(@"执行任务中...");
        
        NSLog(@"7---死亡");
    }];
    
    NSLog(@"2---就绪");
    [thread start];
}

// 打印
16:04:36.579845+0800 Demo[60081:6857038] 1---新建
16:04:36.580071+0800 Demo[60081:6857038] 2---就绪
16:04:36.590601+0800 Demo[60081:6857250] 3---运行
16:04:36.590989+0800 Demo[60081:6857250] 执行任务中...
16:04:36.591309+0800 Demo[60081:6857250] 4---阻塞
16:04:39.594615+0800 Demo[60081:6857250] 5---就绪
16:04:39.595011+0800 Demo[60081:6857250] 6---运行
16:04:39.595297+0800 Demo[60081:6857250] 执行任务中...
16:04:39.595646+0800 Demo[60081:6857250] 7---死亡

3,可调度线程池

  • 新建---就绪:系统会将线程放入可调度线程池中
  • 运行---阻塞:系统会将线程从可调度线程池中移除
  • 阻塞---就绪:系统会将线程再次放入可调度线程池中
可调度线程池

相关文章

  • iOS多线程篇:NSThread

    iOS多线程篇:NSThread iOS多线程篇:NSThread

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程(三)-NSThread

    iOS多线程(二)-NSThread

  • OC_NSThread

    原文链接:iOS多线程--彻底学会多线程之『pthread、NSThread』 **NSThread **是苹果官...

  • iOS多线程-GCD实践

    推荐文章 iOS多线程-NSThread实践 iOS多线程-NSOperation实践 Grand Central...

  • 线程

    iOS 多线程:『GCD』详尽总结 NSThread详解 IOS 多线程编程 『NSOperation、NSOpe...

  • iOS多线程04-NSOperation实践

    推荐文章 iOS多线程01-介绍iOS多线程02-NSThread实践iOS多线程03-GCD实践iOS多线程04...

  • iOS多线程.md

    2018-05-22 iOS多线程-概念iOS多线程:『pthread、NSThread』详尽总结 多线程-概念图...

网友评论

    本文标题:iOS多线程:NSThread

    本文链接:https://www.haomeiwen.com/subject/gimrwhtx.html