異步處理1:為后臺處理創建新線程

異步處理1

在新線程中執行處理:

問題:應用需要執行非常耗時的任務,但是又希望用戶界面保持響應,不會受到新操作的影響.

  • 不開辟一個新線程的做法
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UIActivityIndicatorView*myActivityIndicator;
@property(nonatomic,strong)UIButton*myButton;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
//    創建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];
    
    //創建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];
    }
}

//沒有開辟新線程
-(void)bigTaskAction{
    [self.myActivityIndicator startAnimating];
    [self bigTask];
   
    
}

@end


  • 開辟一個新線程
-(void)bigTaskAction{
    [self.myActivityIndicator startAnimating];
//開辟新的線程
   [NSThread detachNewThreadSelector:@selector(bigTask) toTarget:self withObject:nil];
}

總結:

一般情況下執行代碼的時候,是一行一行的執行,上一行沒有執行完成會等待,現在進行開辟線程,可同時執行 這里就是: 一邊for循環在處理 ,一邊指示器在界面上響應

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,831評論 1 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,302評論 25 708
  • 多線程 在iOS開發中為提高程序的運行效率會將比較耗時的操作放在子線程中執行,iOS系統進程默認啟動一個主線程,用...
    郭豪豪閱讀 2,617評論 0 4
  • 這是我正在寫的文章的一小部分,加了draft標簽放出來,以示我有在堅持我的寫作計劃。寫了很多,預計后天完成文章會發出。
    Howie_Serious閱讀 692評論 0 0
  • 1.什么是 CSS hack 利用瀏覽器在語法上的bug解決低版本的瀏覽器兼容,主要就是IE了。沒錯黑的就是IE ...
    S級食材咩咩羊閱讀 135評論 0 0