惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

Oragekk's Blog

A2UI:当 AI Agent 开始直接生成界面 OpenSpec 技术分享:用规格驱动 AI 编程 ChatGPT&Codex订阅教程 一个 waline 评论系统bug引发的思考 Jenkins 远程触发构建踩坑记 Git SSH 密钥配置 初识Rust vuepress-plugin-meting2 谷歌发布多平台应用开发神器Project IDX!PaLM 2加持 Vue常见优化手段 Vue2响应式原理解析 Dart 中的并发 Flutter 工作原理 如何利用GitHub Action提交URL到搜索引擎 提交URL到搜索引擎(百度、Bing、Google) GitHub Actions 使用介绍 素材设计 前端-Q&A 浏览器的事件循环 你不知道的 CSS 之包含块 CSS 属性计算过程 Vercel deploy忽略指定分支 评论插件 Waline 之邮件通知配置 公开API 终端究极美化iTerm2+Pure 使用Bing API提交网站URL Flutter 基础大集合 关于本站 关于本站 关于我
NSOperatioin
Oragekk · 2016-12-26 · via Oragekk's Blog

一. NSOperatioin

1.目的

  • 开启线程
  • 提供一些 GCD 不具备的功能
  • OC 框架,内部封装的是 GCD

2.区别

  • GCD 执行效率高于 NSOperation
  • NSOperation 提供了一些 GCD 中不具备的功能(暂停/恢复/取消)---管理操作-NSOperation 的高级用法

3.NSOperation 本身是一个抽象类不可以直接使用,实际开发中使用其子类

  • 苹果提供了两个原生子类

    • NSInvocationOperation
      NSInvocationOperation *op = [[NSInvocationOperation alloc]  initWithTarget:self selector:@selector(test) object:nil];
    • NSBlockOperation 将操作封装在 block 中
       NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        // 可以追加操作(无限)---如果在非主队列执行操作,原操作和追加的操作都会 开启多条线程去执行
        NSLog(@"操作 1---------%@",[NSThread currentThread]);
      }];
      [op1 addExecutionBlock:^{
         NSLog(@"追加操作 2-----------%@",[NSThread currentThread]);
      }];
  • 缺点:

    • 有过在主队列执行操作,有一个操作在主线程执行(随机),其他操作在子线程执行 - 如果直接调用 start 方法执行操作,无法确定每一个操作在哪条线程执行
    • 一般不要追加操作,除非就是在非主队列执行
  • 操作依赖 (串行/线程同步技术)添加数量不要太多

    • 对于不同的操作队列中的操作依然有效
    • 添加操作依赖要在添加操作队列之前
    • 只能对添加在操作队列的操作添加依赖
    • 一定不要添加循环依赖

一. NSOperatioinQueue

1.主队列

  • 放在主队列中的操作,都在主线程执行
NSOPerationQueue mainQueue

2.非主队列

  • 放在非主队列中的操作,都在子线程执行
[[NSOPerationQueue alloc] init]

3.一般定义成全局属性


4.每一个操作都有一个 start 方法,用来在当前线程执行

  • 本质:将操作添加到操作队列之后,内部会自动调用内部 start 方法,操作就会自动执行

  • 主队列和非主队列决定操作在哪条线程执行(在哪条线程启动操作的 start 方法)