zoukankan      html  css  js  c++  java
  • iOS多线程编程应用Demo

     

    多线程开发Demo

    1.dispatch_async方法确定在哪个线程队列中执行哪些操作,操作用block实现。

    2.DISPATCH_QUEUE_PRIORITY_DEFAULT默认线程队列,dispatch_get_main_queue()主线程队列。

    3.block中需要修改公共变量,则变量需要用__block修饰,只读的变量可以不用__block,而是在block中复制一个同名变量共block使用。

    4.定义dispatch_group_t来执行可并行执行的代码块,系统会自动选择某个合适的处理器处理,提高程序性能。

    5.通过方法dispatch_group_async分发并行执行的代码块,通过方法dispatch_group_notify通知所有分发块均执行结束后的动作。

    代码如下:

    - (void)doWork:(id)sender{

        _startButton.enabled = NO;

        _startButton.alpha = 0.6;

        _resultsLabel.text = @"";

        _timeLabel.text = @"Waiting ...";

        [_spineer startAnimating];

     

        NSDate *startTime = [NSDate date];

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

        dispatch_async(queue, ^{

            

            NSString *fetchdData = [self fetchSomethingFromSever];

            NSString *processData = [self processData:fetchdData];

            

            __block NSString *firstResult = nil;

            __block NSString *secondResult = nil;

            

            dispatch_group_t group = dispatch_group_create();

            

            dispatch_group_async(group, queue, ^{

                firstResult = [self calculateFirstResult:processData];

            });

            

            dispatch_group_async(group, queue, ^{

                secondResult = [self calculateSecondResult:processData];

            });

            

            dispatch_group_notify(group, queue, ^{

                NSString *resultSummary = [NSString stringWithFormat:@"processData: [%@] firstResult: [%@] SectionResult: [%@] ",processData,firstResult,secondResult];

                

                NSDate *endTime = [NSDate date];

                

                _resultsLabel.text = resultSummary;

                _timeLabel.text = [NSString stringWithFormat:@"Complete in %f seconds",[endTime timeIntervalSinceDate:startTime]];

                [_spineer stopAnimating];

                _startButton.enabled = YES;

                _startButton.alpha = 1.0;

            });

            

            // 唤起主线程

            dispatch_async(dispatch_get_main_queue(), ^{

                

            });

        });

    }

  • 相关阅读:
    让他人变得优秀是伟大
    年龄越大,离家越远
    秋天的叶子
    [短彩信]C#短彩信模块开发设计(2)——配置
    jquery实现网页二级菜单简单代码
    HTML页面做中间页跳转传递参数
    ToJson
    Button页面中的按钮
    SQLSERVER 18056 错误
    在桌面添加可拖动/点击的悬浮窗口
  • 原文地址:https://www.cnblogs.com/ranger-jlu/p/4274859.html
Copyright © 2011-2022 走看看