• 利用performSelectorInBackground和performSelectorOnMainThread实现多线程


    NSObject类的performSelectorOnMainThread和performSelectorInBackground能够实现简单的多线程编程技术
    1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
    创建一个线程在子线程运行,aSelector代表了新创建的线程。arg是传入的參数
    2、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
    该方法的作用是在主线程中,运行制定的方法(代码块)。
    參数:
    @selector就是。要定义我们要运行的方法。
    withObject:arg定义了,我们运行方法时,传入的參数对象。

    类型是id。

    (我们能够传入不论什么參数)
    waitUntilDone:YES指定,当前线程是否要被堵塞。直到主线程将我们制定的代码块运行完。


    注意:
    1.当前线程为主线程的时候,waitUntilDone:YES參数无效。
    2.该方法。没有返回值

    3.该方法主要用来用主线程来改动页面UI的状态。

    sample code:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        
        _label=[[UILabel alloc] initWithFrame:CGRectMake(40, 40, 60, 40)];
        _label.textColor=[UIColor redColor];
        _label.text=@"123";
        [self.view addSubview:_label];
        
        [self performSelectorInBackground:@selector(backWork) withObject:nil];
    }
    -(void)backWork
    {
        NSLog(@"the thread is %@",[NSThread currentThread]);
        sleep(2);
        [self performSelectorOnMainThread:@selector(mainWork) withObject:nil waitUntilDone:NO];
    }
    
    -(void)mainWork
    {
        NSLog(@"the main thread is %@",[NSThread currentThread]);
    
        _label.text=@"456";
        _label.textColor=[UIColor greenColor];
    
    }
    
    运行结果:

    2014-08-19 11:03:59.101 testApp[1848:3107] the thread is <NSThread: 0x8c504a0>{name = (null), num = 2}

    2014-08-19 11:04:01.103 testApp[1848:60b] the main thread is <NSThread: 0x8c444c0>{name = (null), num = 1}




  • 相关阅读:
    sql 积分和消费,类似银行出入账单
    easyui datagrid选中当前行的index
    jquery 1+1=11 纠结死我了
    jquery 选择器
    easyui tree节点设置disabled的功能
    用户体验为什么如此重要?
    三个月内获得三年工作经验
    常用网站
    防呆设计
    读书笔记:启示录,打造用户喜爱的产品
  • 原文地址:https://www.cnblogs.com/llguanli/p/7269953.html
Copyright © 2020-2023  润新知