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开发中“线程”和“队列”有什么区别? [复制] 的相关文章

  • 如何制作带有 SWIFT 图像的弹出窗口

    我想知道如何制作类似于此示例的弹出窗口 原始窗口充满了按钮 选择这些按钮后将拉出我想要使用的图像 我会简单地创建一个可重用的UIView组件以及作为子视图所需的一切 例如UIImageView为了你的形象 UILabel or a UIBu
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • 比较和交换的工作原理

    我读过很多帖子说比较和交换保证原子性 但是我仍然不明白它是如何做到的 这是比较和交换的通用伪代码 int CAS int ptr int oldvalue int newvalue int temp ptr if ptr oldvalue
  • C# 中什么时候应该使用 volatile 关键字?

    谁能提供一个很好的解释volatile https learn microsoft com en us dotnet csharp language reference keywords volatileC 中的关键字 它解决了哪些问题 没
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 用户验证 Facebook 后未调用应用程序打开 Url 方法

    我已将 ios 应用程序中的 facebook 升级到 3 0 并使用提供的代码https developers facebook com docs howtos login with facebook using ios sdk http
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • 处理 UICollectionView 中的点击手势

    由于我无法使用任何框架来创建相册 因此我尝试使用 Collection View 创建自己的相册 但我一开始就陷入困境 我的目标是将网络服务中的所有图像显示到我的集合视图中 因为所有图像都已显示 下一步是当有人点击任何单元格时 我可以在新视

随机推荐

  • 在 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 的