建立主线程的方法
1.NSThreadweb
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]; - (void)updateUI { // UI更新代码 }
2.NSOperationQueueasync
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ // UI更新代码 }];
3.GCDsvg
dispatch_async(dispatch_get_main_queue(), ^{ // UI更新代码 });
简单的使用spa
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); }];
运行你会发现:
上面提示必须在主线程中执行线程
解决办法 :code
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值改变了"; }
如图:
orm