• iphone GCD


    View Code
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
    
    
    NSString *fetchedData = [self fetchSomethingFromServer];
    NSString *processedData = [self processData:fetchedData];
    NSString *firstResult = [self calculateFirstResult:processedData];
    NSString *secondResult = [self calculateSecondResult:processedData];
    
    
    NSString *resultsSummary = [NSString stringWithFormat:
    @"First: [%@]\nSecond: [%@]", firstResult,
    secondResult];
    i++;
    
    
    dispatch_async(dispatch_get_main_queue(), ^{
    [NSThread sleepForTimeInterval:2];
    NSLog(@"show result finish");
    
    label.text = resultsSummary;
    
    });
    
    
    NSDate *endTime = [NSDate date];
    NSLog(@"Completed in %f seconds. --->%d",
    [endTime timeIntervalSinceDate:startTime],i);
    NSLog(@"inside finish");
    
    });
    
    NSLog(@"outside finish");
    }

    该缺点是只会显示最后一个结果。处理时间10s

    下面这个添加一个UIapplicationIndicatorView,并把显示结果放到main thread中 处理时间10s

    View Code
     btn.enabled = NO;
        //btn.titleLabel.text = @"qq";
        [btn setTitle:@"Loaidng" forState:UIControlStateNormal];
        btn.alpha = 0.3;
        [spinner startAnimating];
        static int i =5;
        NSDate *startTime = [NSDate date];
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
            
            NSString *fetchedData = [self fetchSomethingFromServer];
            NSString *processedData = [self processData:fetchedData];
            NSString *firstResult = [self calculateFirstResult:processedData];
            NSString *secondResult = [self calculateSecondResult:processedData];
           
    
         //show result in main thread
            dispatch_async(dispatch_get_main_queue(), ^{
                
                btn.enabled = YES;
                btn.alpha=1.0;
                [spinner stopAnimating];
                //[NSThread sleepForTimeInterval:2];
                NSLog(@"show result finish");
                
                label.text = [[NSNumber numberWithInt:i] stringValue];
                
               });
                
                
                NSDate *endTime = [NSDate date];
                NSLog(@"Completed in %f seconds.   --->%d",
                      [endTime timeIntervalSinceDate:startTime],i);
                NSLog(@"inside finish");
    
            
            });
            
                   
        });
        
         NSLog(@"outside finish");

    下面这个支持多线程,处理时间7s

    View Code
     btn.enabled = NO;
        //btn.titleLabel.text = @"qq";
        [btn setTitle:@"Loaidng" forState:UIControlStateNormal];
        btn.alpha = 0.3;
        [spinner startAnimating];
        static int i =5;
        NSDate *startTime = [NSDate date];
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
            
            NSString *fetchedData = [self fetchSomethingFromServer];
            NSString *processedData = [self processData:fetchedData];
            //NSString *firstResult = [self calculateFirstResult:processedData];
            //NSString *secondResult = [self calculateSecondResult:processedData];
            __block NSString *firstResult;
            __block NSString *secondResult;
            
            dispatch_group_t group = dispatch_group_create();
            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
                firstResult = [self calculateFirstResult:processedData];
            });
            
            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
                secondResult = [self calculateSecondResult:processedData];
            });
            
            dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
                NSString *resultsSummary = [NSString stringWithFormat:
                                            @"First: [%@]\nSecond: [%@]", firstResult,
                                            secondResult];
                i++;
                
                
                // dispatch_async(dispatch_get_main_queue(), ^{
                
                btn.enabled = YES;
                btn.alpha=1.0;
                [spinner stopAnimating];
                //[NSThread sleepForTimeInterval:2];
                NSLog(@"show result finish");
                
                label.text = [[NSNumber numberWithInt:i] stringValue];
                
                //});
                
                
                NSDate *endTime = [NSDate date];
                NSLog(@"Completed in %f seconds.   --->%d",
                      [endTime timeIntervalSinceDate:startTime],i);
                NSLog(@"inside finish");
    
            
            });
            
                   
        });
        
         NSLog(@"outside finish");

     background processing isn't support multiasking playground before mid-2009

    block define:

  • 相关阅读:
    C# 如何在PDF文档中创建表格
    C# 如何创建Excel多级分组
    C# 添加、修改以及删除Excel迷你图表的方法
    C# 创建EXCEL图表并保存为图片
    【BZOJ5287】[HNOI2018]毒瘤(动态规划,容斥)
    【BZOJ5250】[九省联考2018]秘密袭击(动态规划)
    【BZOJ5213】[ZJOI2018]迷宫(神仙题)
    CodeForces Global Round 1
    【BZOJ5212】[ZJOI2018]历史(Link-Cut Tree)
    【BZOJ5211】[ZJOI2018]线图(树哈希,动态规划)
  • 原文地址:https://www.cnblogs.com/yk00/p/2960546.html
Copyright © 2020-2023  润新知