• ios GCD简单介绍 后台运行~


    本从实践出发简单说明:

    首先,gcd是Grand Central Dispatch的缩写,意为多线程优化技术,是苹果为多核处理优化的技术。使用简单、清晰。

    多线程就分同步、异步方法如下:

    //异步线程开启:
     dispatch_async(dispatch_queue_t queue, ^(void)block)
    //同步线程开启:
     dispatch_sync(dispatch_queue_t queue, ^(void)block)
     //dispatch_queue_t:队列 block:执行内容

    队列说明:

    创建方法如下:

    dispatch_queue_create(const char *label, dispatch_queue_attr_t attr)

    参数说明:label为队列名称 attr为队列形式   串行:DISPATCH_QUEUE_SERIAL  并行:DISPATCH_QUEUE_CONCURRENT 

    特殊队列说明:

    系统默认就有一个串行队列main_queue和并行队列global_queue 使用方法如下:

    dispatch_get_main_queue()//主队列
    dispatch_get_global_queue(long identifier, unsigned long flags);
    /*
    identifler:优先级
     *  - DISPATCH_QUEUE_PRIORITY_HIGH:    2    
     *  - DISPATCH_QUEUE_PRIORITY_DEFAULT:      0
     *  - DISPATCH_QUEUE_PRIORITY_LOW:      -2
     *  - DISPATCH_QUEUE_PRIORITY_BACKGROUND: 
    flags:待开发属性 请输入0 
    */

    最后,特殊线程:

     //前面的线程都结束后执行 此线程结束后才执行它后面的线程
     dispatch_barrier_async(dispatch_queue_t queue, ^(void)block)
     dispatch_barrier_sync(dispatch_queue_t queue, ^(void)block)
    
    //重复执行线程 iterations 次数 
    dispatch_apply(size_t iterations, dispatch_queue_t queue, ^(size_t)block)
    
    
    //只执行一次 单例选择
    static dispatch_once_t onceToken;  
        dispatch_once(&onceToken, ^{  
            // code to be executed once  
        }); 
    
    //延迟执行 NSEC_PER_SEC 秒 并非精准执行
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);  
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){  
            // code to be executed on the main queue after delay  
        });  
    
    //设置一个dispatch queue的优先级
    
    void dispatch_set_target_queue( dispatch_object_t object, dispatch_queue_t queue)

     后台运行:

    // AppDelegate.h文件
    @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;
    
    // AppDelegate.m文件
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        [self beingBackgroundUpdateTask];
        // 在这里加上你需要长久运行的代码
        [self endBackgroundUpdateTask];
    }
    
    - (void)beingBackgroundUpdateTask
    {
        self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [self endBackgroundUpdateTask];
        }];
    }
    
    - (void)endBackgroundUpdateTask
    {
        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
        self.backgroundUpdateTask = UIBackgroundTaskInvalid;
    }
  • 相关阅读:
    统计学方法(t-检验)
    generate的使用verilog
    FPGA的存储方式大全
    matlab函数
    三年后的我-记于2018
    labview学习——用户界面模式
    labview线程相关
    labview状态机
    JS~字符串长度判断,超出进行自动截取(支持中文)
    AngulaJs -- 隔离作用域
  • 原文地址:https://www.cnblogs.com/chaochaobuhuifei55/p/5546849.html
Copyright © 2020-2023  润新知