当前位置:首页 > 百科中心 > IT技术 > 客户端技术

利用performSelectorInBackground和performSelectorOnMai

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的状态。

 

- (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];

 

}

运行结果: 

2022-08-19 11:03:59.101 testApp[1848:3107] the thread is {name = (null), num = 2}

2022-08-19 11:04:01.103 testApp[1848:60b] the main thread is {name = (null), num = 1}


【云广告】
本文章由网友发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

评论