iOS开发中“线程”和“队列”有什么区别? [复制]

2024-02-27

我是 iOS 开发新手。现在我对两个概念很困惑:“线程”和“队列”。我所知道的是它们都是关于多线程编程的。谁能为我解释这两个概念以及它们之间的区别? 提前致谢!


NSOperationQueue 和 NSThread 的工作原理:

NS线程:

  1. iOS 开发人员必须为他想要执行的工作/进程编写代码,以及线程本身的创建和管理。
  2. iOS 开发人员必须小心使用线程的行动计划。
  3. iOS 开发人员必须自行管理可能出现的问题,例如线程的可重用性、锁定等。
  4. 线程也会消耗更多的内存。

NSOperationQueue:

  1. NSOperation 类是一个抽象类,它封装了与单个任务相关的代码和数据。
  2. 开发人员需要使用 NSOperation 的子类或系统定义的子类之一来执行任务。
  3. 将操作添加到 NSOperationQueue 中以执行它们。
  4. NSOperationQueue 为每个操作创建一个新线程,并按照它们添加的顺序运行它们。
  5. 操作队列处理所有线程管理,确保操作尽可能快速有效地执行。
  6. 操作队列通过在辅助线程上运行来直接执行操作,或者使用 GCD(Grand Central Dispatch)间接执行操作。
  7. 它负责所有内存管理并大大简化了流程。
  8. 如果不想使用操作队列,也可以通过调用其start方法来执行操作。它可能会使您的代码过于复杂。

如何使用 NSThread 和 NSOperationQueue:

NS线程:

  1. 尽管操作队列是并发执行任务的首选方式,但根据应用程序的不同,有时您可能仍然需要创建自定义线程。
  2. 线程仍然是实现必须实时运行的代码的好方法。
  3. 使用线程来执行无法以任何其他方式实现的特定任务。
  4. 如果您需要后台运行的代码具有更可预测的行为,线程仍然可以提供更好的替代方案。

NSOperationQueue:

  1. 当您想要同时运行更复杂的操作时,请使用 NSOperationQueue。
  2. NSOperation 允许子类化、依赖、优先级、取消,并支持许多其他高级功能。
  3. NSOperation 实际上在底层使用了 GCD,因此它与 GCD 一样具有多核、多线程功能。

现在您应该了解 NSTread 和 NSOperation 的优缺点了。您可以根据应用程序的需要使用其中任何一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发中“线程”和“队列”有什么区别? [复制] 的相关文章

  • 输入文本时 UITextField 的奇怪行为

    想要在以下位置搜索此问题Google但不知道我需要写什么才能找到确切的原因所以我在这里 ISSUE Create UITextField using Interface Builder并运行项目 当我使用输入任何值时iOS Keyboard
  • 适用于 iPhone 的 JavaScript 可从非默认 iOS 浏览器在 Safari 中打开

    在移动 Safari 中打开的 googlechrome www lego com 将切换到 Google Chrome iOS 应用程序来打开该 URL 这允许像下面这样的 scriptlet 它允许您从移动 Safari 切换到 Goo
  • 是否保证 HttpSessionListener.sessionCreated() 在任何其他线程访问新会话之前完成?

    我正在尝试将值缓存在ConcurrentHashMap in the Session 为了避免竞争条件并确保在任何线程尝试使用我的地图之前创建它 我使用HttpSessionListener sessionCreated 将地图添加到Ses
  • 旋转时键盘隐藏

    我正在开发 iPad 应用程序 在其中一个视图中 我有一个子视图 它在按钮点击事件时出现和消失 子视图包含一个UITextView 默认情况下 我将其设置为第一响应者 以便在视图出现时键盘立即出现 子视图也会消失UIKeyboardWill
  • 使用 MapKit ios 绘制渐变折线

    我正在尝试使用叠加层 MKOverlay 跟踪 MKMapView 上的路线 但是 根据当前的速度 如果颜色发生变化 例如 如果用户从 65 英里每小时行驶到 30 英里每小时 则从绿色变为橙色 我希望在跟踪路线时执行类似 Nike 应用程
  • 线程与并行处理

    Microsoft NET 4 0 为其框架引入了新的 并行增强功能 我想知道使用标准 System Threading 函数与新的并行增强功能创建应用程序之间有什么区别 并行扩展和常规线程之间最重要的区别可能是控制流 一个线程 使用创建n
  • 在 Cocoa 中声明对象时,我应该将它们设置为 nil 吗?

    假设我想创建一个实例NSString 根据另一个变量的值初始化为某个值 通常情况下 我会这样做 NSString string if foo 1 string Foo is one else string Foo is not one 然而
  • 如何在 iPhone 表格的单元格内显示多行文本?

    我是 iPhone 开发新手 我正在解析 xml 文件并在表格的每一行中显示标题 日期 视图和摘要 摘要的内容很大 因此单元格中只显示前 3 个单词 我增加了行的高度 我的单元格中仍然显示 3 个单词 摘要应如何正确适合单元格并应显示完整内
  • iOS 6 调试控制台不见了?

    当我进行故障排除时 我曾经使用移动 Safari 的 调试控制台 来打印 console log 消息 在 iOS 6 中 Safari 的高级设置中 Web 检查器 取代了 调试控制台 不幸的是 我的公司不允许我将我们正在测试的手机插入我
  • Objective-C 复制视图

    所以我在这里有一个简短的问题 我有一个视图控制器对象的实例 让我们调用它viewCon1 并且它上面放置了几个子视图 每个子视图都具有独特的属性 让我们称呼他们吧sub1 sub2 and sub3 现在 我以编程方式添加每个子视图 执行以
  • UITextView突出显示的文本颜色或类似的选项?

    我有一个习惯UITableViewCell with a UILabel and a UITextView in it 我希望当用户突出显示时 这两个文本都显示为白色UITableViewCell 显然设置起来非常简单highlighted
  • 使用 For 循环进行异步和等待 [重复]

    这个问题在这里已经有答案了 我有一个 Windows 服务 它根据计划运行各种作业 确定要运行哪些作业后 将调度对象列表发送到迭代列表并运行每个作业的方法 问题是 由于外部数据库调用 某些作业可能需要长达 10 分钟才能运行 我的目标是不让
  • iOS 6 和 Xcode 5.0 的图标光泽度

    在使用 iOS6 和 XCode 5 时 我真的很困惑如何去除图标的光泽 我已经阅读了这些问题 去除 iOS 4 3 中图标的光泽效果 https stackoverflow com questions 8740387 removing g
  • Swift 5 / Xcode 11 更新后模拟器在动画块处冻结

    我在 Xcode 11 中将项目更新为 Swift 5 现在程序在 iPhone 11 模拟器中的动画块处冻结 当我在动画之后设置断点时 它永远不会命中它 重新启动 Xcode 和模拟器并没有解决问题 如果我在设备上运行该程序 它可以正常工
  • 具有多个项目的工作空间还是一个具有多个目标的项目?

    我有 4 个 iOS 应用程序 它们都很相似 它们是闪存卡应用程序 每个应用程序都有不同的主题 他们共享很多课程和图像 现在我将所有 4 个项目作为单独的项目 但我希望简化维护并共享资源 将所有 4 个项目放在同一个工作区中更好 还是将 4
  • 构建复杂 NSCompoundPredicate 的最佳方法是什么?

    我需要建立一个NSPredicate有很多数据 例如 在 SQL 中我会执行如下操作 SELECT FROM TRANSACTIONS WHERE CATEGORY IN categoryList AND LOCATION IN locat
  • 使用 NSPredicate 进行过滤,用于数组内字典内数组的数组计数

    我有如下格式的数组 xyz Array with different values many more keys same as above dictionary many more dictionaries 在这里看 我有字典的主数组 其
  • iOS 使用presentModalSegue 将数据从viewController2 传递回viewController 1

    我有 viewController1 可以对我的 viewController2 进行模态转场 但是 viewController2 嵌入在导航控制器上 因为我需要那里的导航栏 我已经实现了一个协议 将数据从 viewController2
  • “没有 firebaseUI 这样的模块”

    import FirebaseUI 当我导入此模块时 它显示 No such Module as FirebaseUI 但我已经安装了 pod pod Firebase Core pod FirebaseUI pod FirebaseUI
  • 在SCNNode中添加CIFilter使节点变成白盒

    我想添加一个CIGaussianBlur to a SCNNode正在 ARKit 中显示 然而 添加该过滤器会将节点变成 白盒 这是没有和有过滤器的节点 No CIFilter With CIFilter 这是相关代码 let gauss

随机推荐

  • 在 C#/.NET 中将参数标记为不可为空?

    是否有一个简单的属性或数据契约可以分配给函数参数来阻止null从 C NET 中传递 理想情况下 这也会在编译时进行检查以确保文字null没有在任何地方使用它并且在运行时抛出ArgumentNullException 目前我写的东西像 if
  • Cocos2d for android 支持不同分辨率

    我正在尝试构建一款游戏 并且想知道如何支持不同的分辨率和屏幕尺寸 对于精灵的位置 我实现了一个基本函数 它根据一定的比例设置位置 这是通过从sharedDirector的winSize方法获取屏幕宽度和高度获得的 但这种方法没有经过测试 因
  • 使用 std::fill 用递增的数字填充向量

    我想填写一个vector
  • git status --ignored 无限期挂起

    tl dr 跑步git status ignored在我的项目的根永远不会完成 git status工作正常 我开始从我的 IDE PhpStorm 中看到此问题的症状 尽管此问题适用于所有 IntelliJ IDE 没有与 git 相关的
  • 如何在 TreeTable 的第二列中显示树线

    我正在使用 TreeTable com jidesoft grid 请参阅树表 http www jidesoft com javadoc com jidesoft grid TreeTable html 来显示分层数据 它在第一列上使用特
  • typedef 和模板参数同名

    为什么这种情况不正确 这是合乎逻辑的 template
  • Python物理库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 Linux 的 Python 的最新物理库 我刚刚开始使用 PyGame 来学习 Pyt
  • 您如何处理 C# 的新功能,以免它们导致编写出糟糕的代码?

    C 3 0 中引入了许多让我感到不安的功能 例如对象初始值设定项 扩展方法和隐式类型变量 现在 在 C 4 0 中 像动态关键字这样的东西我变得更加担心 我知道这些功能中的每一个CAN以适当的方式使用BUT在我看来 它们使开发人员更容易做出
  • 如何从我的应用程序将信用卡添加到 Google Pay?

    我正在开发移动银行应用程序 显然它管理我们的银行信用卡 所以现在我需要在我的应用程序中实现 将此卡添加到 Google Pay 按钮 但如何为此执行 Google Pay API 请求 我无法找到任何相关文档 这这里只有一个关于 SO 的问
  • 如何知道用户是否已付费订阅

    我正在看这个tutorial https www patchesoft com paypal api subscription php创建我自己的贝宝订阅网关 我以前从未对 API 如此困惑和迷失过 因此 当我们创建计划时 我们会设置商家偏
  • 相同的元组给出不同的泡菜

    这种情况很奇怪 我希望有一些关于 pickle 模块的东西我不知道 我有两个元组s1 and s2 如果我比较它们它会返回True s1 s2 True 如果我腌制它们并比较结果 它会返回False pickle dumps s1 pick
  • Kendo UI 工具提示显示,访问目标?

    可以通过传递参数来访问目标e到匿名函数获取内容 gridToolTipz grid kendoTooltip filter td role gridcell content function e var target e target th
  • SOAP 和 REST 如何与 XML/JSON 响应配合使用?

    这是一个在堆栈溢出时一次又一次被问到的非常常见的问题 我读了很多关于这个问题的答案 但我仍然有点困惑 我需要从 iPhone sdk 调用网络服务 这是我的问题 我不清楚 SOAP 或 REST 返回什么响应 是否有什么具体说明 如果响应是
  • 是否有布尔值的后赋值运算符?

    你好 Java 中可能有这样的事情吗 boolean flag true if flag return flag false return true and assign false to flag afterwards 澄清 上面的方法有
  • 在 redshift postgresql 中我可以使用复制功能跳过列吗

    我有一个 csv 表 t1 其中包含以下列 亚马逊 S3 存储中的 c1 c2 c3 我想将其复制到亚马逊红移中 我创建包含以下列的表 c1 c2 c3 其中所有列均可为空 我用命令复制 复制 t1a c1 c3 从 t1 我预计它会从 t
  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • 此电子邮件验证正则表达式中不可打印控制字符的用途是什么?

    背景资料 我们使用 SonarQube 来获取有关代码库的质量指标 根据规则 SonarQube 在我们的 Node js 代码库中标记了十多个错误S6324 https rules sonarsource com javascript R
  • 多线程Python请求[重复]

    这个问题在这里已经有答案了 对于我的学士论文 我需要从大约 40000 个网站中获取一些数据 因此 我使用 python 请求 但目前从服务器获取响应非常慢 有没有办法加快速度并保持当前的标题设置 我发现的所有教程都没有标题 这是我的代码片
  • 如何使用 Firebase 在 Flutter 中使用 Future Builder 将两个 Future 的结果合并为一个 Future

    所以基本上我想将两个查询的结果添加到一个查询中 删除重复项 然后显示 我该怎么做 Future
  • iOS开发中“线程”和“队列”有什么区别? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 现在我对两个概念很困惑 线程 和 队列 我所知道的是它们都是关于多线程编程的 谁能为我解释这两个概念以及它们之间的区别 提前致谢 NSOperationQueue 和 NSThread 的