18.GCD

    1. 每一个线程内部都有一个消息循环,消息循环一接收消息就会创建自动释放池
    2. 只有主线程的消息循环是开启的,子线程的消息循环默认不开启的,因为UI界面,子线程可能只是一个方法
    3. 没有事情发生会让程序进入休眠状态,例如黑屏
    4. 消息循环接受输入源和定时源,点击屏幕算是输入源
    5. [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    6. 消息循环也是要在一定的模式下才能运行的只有当消息循环的运行模式和定时源模式相匹配才能正常执行
    7. 第五个 添加上去之后再加上滚动字幕就会只能滚动而不能打印定时器内容

    所以用NSRunLoopCommonModes这个模式组就可以了

    1. [NSRunLoop currentRunLoop].currentMode
    2. kCFRunLoopDefaultMode  默认

    UITrackingRunLoopMode追踪模式  专门为滚动视图设计的

    1. 自定义的方法的属性和类名,千万不要跟系统的一样
    2. [NSRunLoop currentRunLoop] run]; 死循环 他后面的东西就不会执行

    [NSRunLoop currentRunLoop] runUntilDate:[];执行完毕后面东西就会执行

     

    1. GCD会充分利用多核 自动管理线程生命周期创建调度销毁 只需要告诉做什么事情
    2. 任务:执行什么操作  队列用来存放任务 将任务添加到队列
    3. block当参数传参

              - (void)callDemo:(void(^)())block{};调用block

    1. 串行队列的特点让任务一个一个的执行

    同步方式在当前线程依次执行

    异步新开线程在新线程中执行任务

     

    1. SERIAL串行

    dispatch_queue_t = dispatch_queue_create("zc", DISPATCH_QUEUE_SERIAL);

    void (^task)() = ^{

    NSLog();

    }

    dispatch_sync (queue, task); 添加队列

     

    1. 串行队列 +同步任务 main顺序执行

    串行队列 +异步任务 2  顺序执行

     

    DISPATCH_QUEUE_CONCURRENT并发队列  同时调度有序的任务

    并发队列 +同步任务 顺序执行 阻塞其他的任务main

    并发队列 +异步任务  无序执行  开多个线程

     

    1. 线程的开启是看内部有没有空闲的线程然后再次开辟线程 前提是异步

     

    1. 同步只在当前线程中执行
    2. 主队列 主队列的任务只有主线程空闲的时候才会被调度

    主队列在程序一运行就开始的不需要创建只需要get

    主队列中的任务一定是要在主线程执行的

     

    1. dispatch_queue_t queue = dispatch_get_main_queue(); 获取主队列

    async  还是在主线程执行 顺序执行  等待大括号执行完才能执行block

    sync 会发生死锁 同步任务主队列相互等待

     

    1. 全局队列本质是并发队列

    dispatch_queue_t global_queue = dispatch_get_global_queue(0,0);

    第二个参数是预留参数 提供以后用

    第一个参数ios7及以前代表队列的优先级ios8.0及以后代表服务质量 为了适配传入0

    让系统自己判断 凡是涉及到优先级让系统判断

     

    1. 同步可以建立依赖关系 一步一步的 就像在官网买软件

     

    1. GCD高级功能  一次性执行  延迟操作 调度组

     

    1. 一次性操作的关键在于staticdispatch_once_t onceToken ; 一开始为然后为-1;

     

    1.  单利--   有且只有一个副本   生命周期跟应用程序是一样的只有一个实例化对象

    对象要保存到静态区
     

    1. dispatch_time_t when 延迟的时间精确到纳秒

    dispatch_queue_t queue队列

    dispatch_block_t block 任务

    延迟多少纳秒 在哪个队列中执行那个任务

     

    1. cell的高度根据下载的图片固定 所以需要调度组

     

    1. dispatch_group_t  group = dispatch_group_creat;

     

    监听 dispatch_group_notify(group,queue(需要回到主线程要回去getmain), ^{});

     

    1. 看底层点man +  dispatch_group_notify  会出现最底层的
    1. NSOperation是一个抽象类 不能直接实用 有定义无实现。

    约束子类共有的属性和方法

    1. 父类指针可以指向子类对象
    2. NSInvocationOperation操作默认是异步的 队列默认是并发的
    3. NSBlockOperation 默认是异步的并发
    4. 实用NSOperation 第一步要创建全局并发队列
    5. [self.que addOperationWithBlock:^{};
    6. [NSOperationQueue mainQueue] add     ---- 主队列
    7. 组队列只能用异步

       static NSInteger a;

        a++;

       NSLog(@"%zd", a);

    1. start是在当前线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值