释放 GCD 调度队列属性的正确方法是什么?

2024-04-18

我正在使用一个dispatch_queue,它是通过其所有者的属性访问的,如下所示:

@property (nonatomic, assign) dispatch_queue_t queue;

请注意assign关键词。队列在对象的整个生命周期中使用,因此由对象拥有。当拥有的对象被释放时,我释放队列:

-(void)dealloc
{
    dispatch_release(self.queue);
    self.queue = nil;
}

我该如何正确释放这个?会使用retain/release work?

如果在调用释放时队列中有待处理/正在运行的内容,会发生什么情况?


以下内容是从开发者文档中窃取的:

调度队列和其他调度 对象是引用计数数据 类型。当您创建连续剧时 调度队列,它有一个初始的 引用计数为 1。您可以使用 调度保留和调度释放 递增和递减函数 根据需要引用计数。什么时候 队列的引用计数达到 零,系统异步 取消分配队列。

当您的应用程序不再需要 调度队列,它应该释放 它与dispatch_release函数一起使用。 任何提交给a的待处理块 队列保存对该队列的引用, 所以队列不会被释放,直到 所有待处理的块均已完成。

注意:您不需要保留或 释放任何全局调度 队列,包括并发 调度队列或主调度 队列。任何试图保留或 释放队列被忽略。

因此,任何需要使用 -retain 的地方都使用dispatch_retain,任何需要使用 -release 的地方都使用dispatch_release。

调度队列遵循与 Objective-C 对象相同的通用内存管理约定。并且在所有排队的块完成之前它们不会被释放。

如果您确实想要一种方法来关闭调度队列:无法通过任何类型的 API 取消所有排队的块,因此它们始终必须运行完成。加快此过程的一种方法是在管理调度队列的类中使用 BOOL 变量:_isValid。当你想关闭队列时,可以将_isValid设置为NO。提交到队列的所有块在执行任何工作之前都应首先检查 _isValid。

旁注:使用 NSOperationQueue 可能更合适。参见克里斯·汉森的博客文章 http://eschatologist.net/blog/?p=232.

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

释放 GCD 调度队列属性的正确方法是什么? 的相关文章

  • 从 Xcode 更改按钮文本?

    我有一个 IBAction 连接到 Interface Builder 中的一个按钮 是否可以在运行时从我的代码中更改按钮 在 IB 中 上的文本 如果您的代码中有一个连接到某个操作的按钮 则无需实例变量即可更改标题 例如 如果按钮设置为以
  • 原生插入符位置 macos cocoa

    我希望能够使用 cocoa 或 appleScript 获取 Mac High Sierra 中任何应用程序内的全局插入符位置 我已经使用 NSEvent 来获取键盘和鼠标挂钩 但是有没有办法获取插入符位置挂钩 插入符号与鼠标位置不同 它会
  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • 获得 IAP 产品响应后出现 Objective-C 错误

    此代码来自 Phonegap 代码 IAP 插件 错误发生在 发送的js 之后的代码行上 除了最后一个 nil 之外 发送到该函数的所有元素均非零 我什至将它们注销以确保它们已发送 该代码直接来自插件 https github com us
  • 检测用户何时清除通知中心的通知

    我的应用程序需要知道用户是否使用清除按钮从通知中心删除 清除应用程序通知 是否可以检测用户何时从通知中心删除通知或抓取通知中心上的一组通知 你 即App 无法与NotificationCenter交互 NotificationCenter与
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 如何使用自动布局在自定义 UITableViewCell 内动态设置 UITextView 高度

    I have UITableView every tableViewCell is custom Inside my customTableViewCell is a UITextView TextViews frame is pin or
  • 永远不会在 ios 的 google API 中获取上传数据进度

    我在我的应用程序中使用 Google Drive API 从我的应用程序上传文件 到目前为止 我成功了 并找到了上传所有类型文件的良好结果 我跟着谷歌示例 https developers google com drive examples
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • 方法调用中的插入符[重复]

    这个问题在这里已经有答案了 我正在阅读本教程 并遇到了这行代码 这让我感到困惑 localSearch startWithCompletionHandler MKLocalSearchResponse response NSError er
  • Objective-C++ 中的 boost::shared_ptr

    这是对我之前提出的一个问题的更好理解 我有以下 Objective C 对象 interface OCPP MyCppobj cppobj end implementation OCPP OCPP init cppobj new MyCpp
  • 将 Xcode 4.5 新 XIB 文件恢复到 iOS<6

    我已经安装了Xcode 4 5 with iOS6 SDK以及其他用于测试目的的旧 SDK 从 4 3 到 6 0 很美 但是有一个BIG问题 生成一个新的 XIB 文件以兼容 iOS6 这是一个问题 因为我的应用程序需要运行在旧设备 不只
  • [[NSMutableDictionary alloc] initWithObjects:...] 和 [NSMutableDictionary DictionaryWithObjects:...] 之间的区别?

    仍在学习 Objective C iPhone SDK 我想我知道为什么这不起作用 但我只是想确认一下 In awakeFromNib 如果我使用 NSMutableDictionary alloc initWithObjects 它实际上
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 如何在 SQLite 中替换字符串?

    如何更新具有以下内容的表列 var mobile 233KKFSDK3234 Documents Page jpg 并将其替换为 Documents Page jpg 在 SQLite 中 注意 所有文字 除了 Documents 是动态的
  • AppDelegate 的变量用作全局变量不起作用

    我想使用我的 AppDelegate 来存储任何其他类都可以访问的对象 我已经像这样声明了这个 AppDelegate interface MyAppDelegate UIResponder
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • ios 11 - UIBarButtonItem 内的 UIButton 导致自动布局错误

    我在将 UIButton 添加到 UIBarButtonItem 时遇到了一个已知问题 我尝试按照建议添加自动布局约束堆栈溢出 https stackoverflow com a 46336639 505603但我收到如下所述的错误 UIB
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb

随机推荐

  • 理解Sinon.js的yield()、yields()和callsArg()

    有什么区别 stub yield arg1 arg2 spy yields arg1 arg2 stub callsArg index in the Sinon js http sinonjs org docs stubs存根库 stub
  • Android 如何从已知的 URI 获取单首歌曲的 ID 信息

    我知道单曲的 URI 如何获取歌曲的信息 主打歌等 抱歉 我能找到的所有帖子都提供了一种索引整个库的方法 而不是如何获取单个已知 URI 歌曲的信息 这就是我用来获取 URI 的方法 audioID 存储在 SharedPrefs 中 谢谢
  • 通过 Activator.CreateInstance 创建可为 null 的对象返回 null

    我正在创建一个将小脚本转换为 dll 的系统 当我尝试采用可为空值类并将其设为参数的默认值时 我遇到了问题 问题是我需要在编译器中创建用户选择的可为空的实例并将其设置为常量 不幸的是 每当我使用Activator CreateInstanc
  • 对在欧盟地区运行的 Heroku 应用程序强制使用 SSL

    我正在努力为 Heroku 欧盟地区 上运行的 Rails 应用程序强制实施 SSL 连接 我已成功将证书 包括 Heroku SSL 附加组件 添加到自定义域 如果我明确声明 https com 则效果完美 但我想将所有 http 请求重
  • 您能解释一下 md5 和 modulo 的这些令人不安的异常情况吗?

    好吧 标题确实很主观 但这正是我的问题所在 背景是我想将静态 Web 内容的点击均匀地分布在定义数量的缓存服务器上 此外 向客户端的交付应该会加快 因为多个域正在使用中并且请求不会相互阻塞 我也不需要经典的负载均衡器 而是立即在我的 htm
  • 添加渐变背景色和描边 - CSS

    我已将背景渐变添加到其中一个 css 类中 但它从笔画中获取颜色 有没有办法使边框渐变 flex wrapper display flex flex flow row nowrap single chart margin left 160p
  • 调试变量不适用于 gulp sourcemaps + uglify

    我有以下用于捆绑 javascript 的 gulp 任务 gulp task js function return gulp src paths js pipe sourcemaps init pipe uglify pipe conca
  • 在 MATLAB 中调整 3D 矩阵(图像)的大小

    我有一个 3D 矩阵 MxNxK 想将其大小调整为 M xN xK 就像 matlab 中的 imresize 一样 我正在使用图像金字塔 但其结果不是很准确 需要一个更好的 有什么解决办法吗 你可以使用interp3 因为您想要插入 3D
  • 从 Dataflow 写入 BigQuery - 作业完成时不会删除 JSON 文件

    我们的 Dataflow 作业之一将其输出写入 BigQuery 我对其幕后实现方式的理解是 Dataflow 实际上将 JSON 格式的结果 分片 写入 GCS 然后启动 BigQuery 加载作业以导入该数据 但是 我们注意到 无论作业
  • CSS 中的鼠标按下选择器是什么?

    我注意到按钮和其他元素具有默认样式 并按 3 个步骤运行 普通视图 悬停 焦点视图和鼠标按下 单击视图 在 CSS 中我可以更改普通视图和悬停视图的样式 如下所示 button background 333 color FFF button
  • ngResource 将 POST 参数附加到 url

    我有一个看起来像这样的角度服务 我在这里发出 POST 请求 factory Apples function resource HOST return resource HOST apples create method POST para
  • 使用 XPath 排序 - 不是 XSL

    XPath DOM 编程中有什么方法可以使用System Xml to run selectNodes XPATH 带有排序参数 例如 对于以下 XML 程序按照与文档相同的顺序 降序 写入值 有没有办法使用 XPath 来按升序获取值 笔
  • 是否可以使用计时器为 JButton 创建淡入效果?

    我想在我的程序按钮上添加一些效果 当我按下button the button应该淡入 Using a timer改变的值Opaque in new Color 是一种方式 但是可以应用于JButton还有 因为JButton有边界 所以我想
  • 分配后列表被意外清除[重复]

    这个问题在这里已经有答案了 class ListHolder public List
  • 应用程序中所有国家/地区的城市和邮政编码

    有没有一种方法可以将所有国家 州 城市的邮政编码存储在一个数据库中 我一直在到处寻找 我发现地名网 http www geonames org 我猜其中包含了所有内容 但无法直接获取该数据 我正在使用导轨 如果有任何助手或插件就太好了 如果
  • 更改 iOS 中的应用程序语言设置而不是整个设备

    我希望在我的应用程序中可以选择更改我的应用程序语言 只是应用程序语言而不是整个系统 请给我一些提示好吗 提前致谢 我知道本地化 您可以使用从 Xcode 设置的自定义构建标志来完成此操作 这样您就可以在本地化下运行应用程序 而无需更改设备的
  • 当我单击数据表中的下一页时,我的 jquery 选择器不再工作

    我在用着数据表 http www datatables net jquery 插件在页面上显示我的数据 当有人单击一行时 我有这个选择器 myTable tr class tableHeader click function alert c
  • 多线程程序中的 std::string

    鉴于 1 C 03标准没有以任何方式解决线程的存在 2 C 03 标准将其留给实现来决定是否std string应该在其复制构造函数中使用 Copy on Write 语义 3 写时复制语义通常会导致多线程程序中不可预测的行为 我得出以下看
  • 为什么要使用Promise.resolve().then()?

    在阅读 Angular 指令的代码时路由器链路激活 https github com angular angular blob master packages router src directives router link active
  • 释放 GCD 调度队列属性的正确方法是什么?

    我正在使用一个dispatch queue 它是通过其所有者的属性访问的 如下所示 property nonatomic assign dispatch queue t queue 请注意assign关键词 队列在对象的整个生命周期中使用