美文网首页
iOS开发之多线程—NSThread<三>

iOS开发之多线程—NSThread<三>

作者: f1e583c455bf | 来源:发表于2017-05-12 15:42 被阅读0次

    一、NSThread介绍

    NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程,需要手动管理线程的生命周期,处理线程同步等问题。

    注:NSThread经常用到的方法

     [NSThread currentThread];//获取当前线程
    

    二、使用

        //1.动态实例化
        //参数 2.执行方法 3.传递参数
        NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRun:) object:@"动态创建"];
        //手动开启
        [newThread start];
    
        //2.静态实例化
        //参数:1.执行方法 2.传递参数
        [NSThread detachNewThreadSelector:@selector(threadRun:) toTarget:self withObject:@"测试"];
    
        //3.隐式实例化
        [self performSelectorInBackground:@selector(threadRun:) withObject:nil];
    

    子线程执行方法

    - (void)threadRun:(NSString *)str{
        //当前线程[NSThread currentThread],主线程[NSThread mainThread]
        NSLog(@"%s---%@---%@---%@",__FUNCTION__,[NSThread currentThread],str,[NSThread mainThread]);
    }
    

    暂停当前线程

       [NSThread sleepForTimeInterval:2];
    

    线程直接通信

    #import "ViewController.h"
    @interface ViewController ()
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        NSLog(@"%s---%@",__FUNCTION__,[NSThread currentThread]);
    
       // 参数 2.执行方法 3.传递参数
        NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRun:) object:@"动态创建"];
        //手动开启
        [newThread start];
        //waitUntilDone 是否等待 @selector 里面的方法执行完 再继续走下去
    
        //在主线程上执行操作
        [self performSelectorOnMainThread:@selector(threadMainRhread) withObject:nil waitUntilDone:YES];
        //在当前线程执行操作
        [self performSelector:@selector(threadcurrentThread) withObject:nil];
    }
    
    - (void)threadRun:(NSString *)str{
        //当前线程,主线程
        NSLog(@"%s---%@---%@---%@",__FUNCTION__,[NSThread currentThread],str,[NSThread mainThread]);
        //在指定线程上执行操作
        [self performSelector:@selector(threadNewThread) onThread:[NSThread currentThread] withObject:nil waitUntilDone:YES];
    
    }
    - (void)threadNewThread{
        NSLog(@"%s---%@",__FUNCTION__,[NSThread currentThread]);
    
    }
    - (void)threadMainRhread{
        NSLog(@"%s---%@",__FUNCTION__,[NSThread currentThread]);
    
    }
    - (void)threadcurrentThread{
        NSLog(@"%s---%@",__FUNCTION__,[NSThread currentThread]);
    
    }
    @end
    
    

    相关文章

      网友评论

          本文标题:iOS开发之多线程—NSThread<三>

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