zoukankan      html  css  js  c++  java
  • ios

    首先GCD两个名词: 队列 同步异步.

    队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步.

    串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的.

    并发队列: 开启新的线程执行任务,不会阻塞主线程.

    同步异步:是队列中任务执行的方式,同步也就是任务在一个线程中顺序执行属于会'阻塞'主线程,异步:不会阻塞主线程,可以开启新线程.

    
    dispatch_sync(queue, block) //同步执行
    dispatch_async (queue, block) //异步执行
    dispatch_after(time, queue, block) //同步延迟执行
    
    
    

    queue第一个参数,"队列",有三种:全局队列,主队列,自己创建的队列.

    全局队列:默认是并发队列,---可以开启新线程

    
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 
    
    

    并发队列第一个参数是在全局队列的优先级. 有 默认 , 高, 低,后台 四种

    主队列: 串行队列

    自己创建的队列:

    
    dispatch_queue_create("com.hello", NULL)
    
    
    

    第二个参数 NULL 代表创建的是串行队列.如果是DISPATCHQUEUECONCURRENT 代表并发队列(ios 4.3以后出现的)


    线程是不安全的,多个线程在访问系统同一资源的时候会造成想不到的错误:例如银行存取钱,买票 案例

    解决办法就是给线程加上锁,自带内部同步锁,或者自己创建一个同步锁,下面演示自己创建的同步锁

    _syncQueue = dispatch_queue_create("com.effectiveObjectiveC.syncQueue", NULL);
    - (NSString *)someString
    {
        __weak NSString *localSomeString;
        dispatch_sync(_syncQueue, ^{
            localSomeString = _someString;
        });
        return localSomeString;
    }
    - (void)setSomeString:(NSString *)someString
    {
        dispatch_sync(_syncQueue, ^{
            _someString = someString;
        });
    }
    
    
  • 相关阅读:
    设计模式之装饰器模式
    设计模式之原型模式
    设计模式之策略模式
    设计模式之适配器模式
    设计模式之注册模式
    wordpress中add_action和add_filter
    工厂模式
    设计模式之命令链模式
    观察者模式
    工厂模式
  • 原文地址:https://www.cnblogs.com/adampei-bobo/p/5434866.html
Copyright © 2011-2022 走看看