异步处理2:向主线程发送消息更新用户界面

主线程和后台线程的通信

本篇要达到的效果就是:一边执行for循环 ,一边界面能实时查看进度条

代码是在异步处理1的基础上增加的看不清代码可先去看1

 -(void)viewDidLoad添加代码段
    //新建label
    self.myProcessView=[[UIProgressView alloc]init];
    
    self.myProcessView.frame=CGRectMake(20, 20, 280, 10);
    
    [self.view addSubview:self.myProcessView];


//进度条
-(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];
    }
}


更新界面根据updateUIWhen 这个整数 通过判断所占总共进度的多少 达到实时10% 就会更新界面

performSelectorOnMainThread: WithObject: waitUntilDone: 是主线程和后台线程通信的根本

主线程于后台线程之间通讯.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎样m阅读 5,161评论 0 1
  • 1.1 谈一谈GCD和NSOperation的区别? 首先二者都是多线程相关的概念,当然在使用中也是根据不同情境进...
    John_LS阅读 5,135评论 0 12
  • 本文选译自《Threading Programming Guide》。 导语 线程技术作为在单个应用程序中并发执行...
    巧巧的二表哥阅读 7,257评论 4 24
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 5,824评论 0 17
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 5,321评论 1 27

友情链接更多精彩内容