• UI进阶之多线程


    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
      //[NSThread currentThread] 获取当前的线程
        
        NSLog(@"current == %@", [NSThread currentThread]);
    
        //[NSThread mainThread] 获取主线程
        
        NSLog(@"main == %@", [NSThread mainThread]);
        
      
        //[NSThread isMainThread] 判断当前线程是否是主线程
        NSLog(@"isMainThread == %d", [NSThread isMainThread]);
        
       
        
    #pragma mark --NSObject 开辟子线程--
      
    //    第一个参数: selector 子线程执行的代码
    //    第二个参数: 表示selector传递的参数
        [self performSelectorInBackground:@selector(sayHi) withObject:@"ssss"];
        self.view.backgroundColor = [UIColor redColor];
        
    #pragma  mark -- NSThread手动开辟子线程-
        
        //使用NSThread 开辟子线程
        //参数一: target
        //参数二: action
        //参数三: 传参
        NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(sayHi) object:nil];
        
        //让线程开始执行
        [thread start];
        
        //取消线程  不会真正的取消掉线程, 而是标记 这个被取消了
        [thread cancel];
        
    #pragma  mark -- 使用NSThread自动的去开辟一个线程--
        //使用NSThread自动的开辟一个线程
        //不需要手动开启线程
        [NSThread detachNewThreadSelector:@selector(sayHi) toTarget:self withObject:nil];
       
    }
    
    
    - (void)sayHi
    {
        
    //    //当前线程
    //    NSLog(@"current == %@", [NSThread currentThread]);
    //    
    //    
    //    //主线程
    //    NSLog(@"main == %@", [NSThread mainThread]);
        
        int a = 10000;
        for (int i = 0; i < a; i ++) {
            NSLog( @"i == %d", i);
            
            //关闭线程
            //写在哪里 哪个线程就关闭了, 注意不要随意使用, 使用的时候一定要注意当前线程是否是主线程
            if (i == 500) {
                [NSThread exit];
            }
            
        }
       
       //NSObject 中回到主线程去做某些事情
        //参数一: 回到主线程做的事情
        //参数二: 传递的参数
        //参数三: 直到当前线程已经结束才去做
        [self performSelectorOnMainThread:@selector(onMainThread) withObject:nil waitUntilDone:YES];
        
    }
    
    - (void)onMainThread
    {
        
        self.view.backgroundColor = [UIColor orangeColor];
        
        NSLog(@"main == %@", [NSThread mainThread]);
        
        NSLog(@"current == %@", [NSThread currentThread]);
        
        NSLog(@"ismainThread == %d", [NSThread isMainThread]);
        
    }
  • 相关阅读:
    springMVC静态资源
    MyBatis Generator
    使用springMVC时的web.xml配置文件
    Semaphore
    spring注解驱动--组件注册
    第1章 初始Docker容器
    docker面试整理
    第5章 运输层
    验证码
    带进度条的上传
  • 原文地址:https://www.cnblogs.com/huyibo/p/5370351.html
Copyright © 2020-2023  润新知