美文网首页iOS 开发 iOS OC 学习手册
异步处理1:为后台处理创建新线程

异步处理1:为后台处理创建新线程

作者: Dayu大鱼 | 来源:发表于2016-07-15 14:46 被阅读68次

异步处理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循环在处理 ,一边指示器在界面上响应

相关文章

  • 异步处理1:为后台处理创建新线程

    异步处理1 在新线程中执行处理: 问题:应用需要执行非常耗时的任务,但是又希望用户界面保持响应,不会受到新操作的影...

  • SpringBoot中使用异步处理

    1. 同步处理 创建Controller: 创建Service: 后台打印结果: 前端结果: 2. 使用异步 2....

  • 架构设计 | 异步处理流程,多种实现模式详解

    本文源码:GitHub·点这里 || GitEE·点这里 一、异步处理 1、异步概念 异步处理不用阻塞当前线程来...

  • IO 多路复用

    IO 多路复用 如何提升并发能力? 多线程模型,创建新的线程处理请求 多进程模型,创建新的进程处理请求 IO 多路...

  • 多线程设计模式

    Future 异步创建一个子线程,去完成相关请求任务,然后将处理结果返回给主线程main。在子线程请求并处理数据的...

  • 线程池网络服务

    线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。...

  • tomcat 请求分析 总结

    创建线程并处理新连接 EndPoint创建Acceptor线程循环监听新的连接(socket)。 监听到的新连接(...

  • android几种异步处理情况笔记

    android几种异步处理情况笔记 Handler类: 1 在子线程中发送Message 2 在主线程中获取、处理...

  • MySQL查询执行过程

    MYSQL请求处理路径: MySQL请求处理流程: #1.为用户创建、分配处理线程。 #2.登录验证 #3.资源初...

  • Ceph: 异步信号处理实现

    异步信号处理函数 原理: 创建一个独立的线程,根据信号调用对应的信号处理函数 利用管道进行线程之间的通信,在产生信...

网友评论

    本文标题:异步处理1:为后台处理创建新线程

    本文链接:https://www.haomeiwen.com/subject/yuuyjttx.html