主線程和后臺線程的通信
本篇要達(dá)到的效果就是:一邊執(zhí)行for循環(huán) ,一邊界面能實(shí)時查看進(jìn)度條
-(void)viewDidLoad添加代碼段
//新建label
self.myProcessView=[[UIProgressView alloc]init];
self.myProcessView.frame=CGRectMake(20, 20, 280, 10);
[self.view addSubview:self.myProcessView];
//進(jìn)度條
-(void)updateProgressViewWithPercentage:(NSNumber*)percentageDone{
[self.myProcessView setProgress:[percentageDone floatValue] animated:YES];
}
-(void)bigTask{
@autoreleasepool {
int updateUIWhen = 1000;
for (int i=0; i<10000; i++) {
NSString*newString=[NSString stringWithFormat:@"i=%d",i];
NSLog(@"%@ ",newString);
if (i==updateUIWhen) {
float f=(float)i/10000;
NSNumber*percentDone=[NSNumber numberWithFloat:f];
[self performSelectorOnMainThread:@selector(updateProgressViewWithPercentage:)withObject:percentDone waitUntilDone:YES];
updateUIWhen=updateUIWhen+1000;
}
}
[self performSelectorOnMainThread:@selector(updateProgressViewWithPercentage:)withObject:[NSNumber numberWithFloat:1.0] waitUntilDone:YES];
[self.myActivityIndicator stopAnimating];
}
}
更新界面根據(jù)updateUIWhen 這個整數(shù) 通過判斷所占總共進(jìn)度的多少 達(dá)到實(shí)時10% 就會更新界面
performSelectorOnMainThread: WithObject: waitUntilDone: 是主線程和后臺線程通信的根本
主線程于后臺線程之間通訊.png