创建主线程的方法
1.NSThread
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
- (void)updateUI {
// UI更新代码
}
2.NSOperationQueue
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// UI更新代码
}];
3.GCD
dispatch_async(dispatch_get_main_queue(), ^{
// UI更新代码
});
简单的使用
showLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 80)];
[self.view addSubview:showLable];
showLable.text = @"值改变前";
showLable.backgroundColor = [UIColor redColor];
//创建一个子线程
NSOperationQueue *waitQueue = [[NSOperationQueue alloc] init];
[waitQueue addOperationWithBlock:^{
NSLog(@"%@",showLable.text);
showLable.text = @"值改变了";
NSLog(@"%@",showLable.text);
}];
运行你会发现:
上面提示必须在主线程中执行
解决办法 :
showLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 80)];
[self.view addSubview:showLable];
showLable.text = @"NSThread值改变前";
showLable.backgroundColor = [UIColor redColor];
//创建一个子线程
NSOperationQueue *waitQueue = [[NSOperationQueue alloc] init];
[waitQueue addOperationWithBlock:^{
//NSThread
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
}];
UILabel * showLable1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 100 + 100 , 320, 80)];
[self.view addSubview:showLable1];
showLable1.text = @"NSOperationQueue值改变前";
showLable1.backgroundColor = [UIColor redColor];
//创建一个子线程
NSOperationQueue *waitQueue1 = [[NSOperationQueue alloc] init];
[waitQueue1 addOperationWithBlock:^{
//NSOperationQueue
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// UI更新代码
showLable1.text = @"NSOperationQueue值改变了";
}];
}];
UILabel * showLable2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 100 + 200, 320, 80)];
[self.view addSubview:showLable2];
showLable2.text = @"GCD值改变前";
showLable2.backgroundColor = [UIColor redColor];
//创建一个子线程
NSOperationQueue *waitQueue2 = [[NSOperationQueue alloc] init];
[waitQueue2 addOperationWithBlock:^{
//GCD
dispatch_async(dispatch_get_main_queue(), ^{
// UI更新代码
showLable2.text = @"GCD值改变了";
});
}];
- (void)updateUI {
// UI更新代码
showLable.text = @"NSThread值改变了";
}
如图: