異步處理1
在新線程中執(zhí)行處理:
問(wèn)題:應(yīng)用需要執(zhí)行非常耗時(shí)的任務(wù),但是又希望用戶界面保持響應(yīng),不會(huì)受到新操作的影響.
- 不開(kāi)辟一個(gè)新線程的做法
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UIActivityIndicatorView*myActivityIndicator;
@property(nonatomic,strong)UIButton*myButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 創(chuàng)建button
self.myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
self.myButton.frame=CGRectMake(20, 403, 280, 37);
[self.myButton addTarget:self action:@selector(bigTaskAction) forControlEvents:UIControlEventTouchUpInside];
[self.myButton setTitle:@"do long task" forState:UIControlStateNormal];
[self.view addSubview:_myButton];
//創(chuàng)建indicator
self.myActivityIndicator=[[UIActivityIndicatorView alloc]init];
self.myActivityIndicator.frame=CGRectMake(142, 211, 37, 37);
self.myActivityIndicator.activityIndicatorViewStyle=UIActivityIndicatorViewStyleWhiteLarge ;
self.myActivityIndicator.hidesWhenStopped=NO;
[self.view addSubview:self.myActivityIndicator];
}
-(void)bigTask{
@autoreleasepool {
for (int i=0; i<10000; i++) {
NSString*newString=[NSString stringWithFormat:@"i=%d",i];
NSLog(@"%@ ",newString);
}
[self.myActivityIndicator stopAnimating];
}
}
//沒(méi)有開(kāi)辟新線程
-(void)bigTaskAction{
[self.myActivityIndicator startAnimating];
[self bigTask];
}
@end
- 開(kāi)辟一個(gè)新線程
-(void)bigTaskAction{
[self.myActivityIndicator startAnimating];
//開(kāi)辟新的線程
[NSThread detachNewThreadSelector:@selector(bigTask) toTarget:self withObject:nil];
}
總結(jié):
一般情況下執(zhí)行代碼的時(shí)候,是一行一行的執(zhí)行,上一行沒(méi)有執(zhí)行完成會(huì)等待,現(xiàn)在進(jìn)行開(kāi)辟線程,可同時(shí)執(zhí)行 這里就是: 一邊f(xié)or循環(huán)在處理 ,一邊指示器在界面上響應(yīng)