异步处理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,853评论 1 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,831评论 25 709
  • 多线程 在iOS开发中为提高程序的运行效率会将比较耗时的操作放在子线程中执行,iOS系统进程默认启动一个主线程,用...
    郭豪豪阅读 2,637评论 0 4
  • 这是我正在写的文章的一小部分,加了draft标签放出来,以示我有在坚持我的写作计划。写了很多,预计后天完成文章会发出。
    Howie_Serious阅读 729评论 0 0
  • 1.什么是 CSS hack 利用浏览器在语法上的bug解决低版本的浏览器兼容,主要就是IE了。没错黑的就是IE ...
    S级食材咩咩羊阅读 140评论 0 0