objective-c - 在 ARC 之后,我应该为调度队列使用什么属性?

我维护一个调度队列作为我的 View Controller 的一个属性。我在 View Controller 的 init 方法中创建了一次这个队列,并为一些后台任务重用了几次。在 ARC 之前,我是这样做的:

@property (nonatomic, assign) dispatch_queue_t filterMainQueue;

在初始化中:

if (filterMainQueue == nil) {
     filterMainQueue = dispatch_queue_create("com.myQueue.CJFilterMainQueue", NULL);
}

但是在 ARC 之后,我不确定这是否应该仍然是“分配”,或者应该是“强”还是“弱”。 ARC 转换器脚本没有改变任何东西,但我不确定是否有一个微妙的错误来自这个队列在使用时可能被释放的事实?

在使用 ARC 时,这 3 种类型的属性有什么区别,哪一种最适合调度队列?

最佳答案

更新答案:

在当前的 OS X 和 iOS 中,Dispatch 对象现在被 ARC 视为 Obj-C 对象。它们将以与 Obj-C 对象相同的方式进行内存管理,您应该使用 strong为您的属性(property)。

这由 OS_OBJECT_USE_OBJC 控制宏,定义在 <os/object.h> .设置为 1默认情况下,当您的部署目标是 OS X 10.8 或更高版本,或者 iOS 6.0 或更高版本时。如果您要部署到较旧的操作系统,则保留在 0你应该在下面看到我原来的答案。


原答案:

Dispatch 对象(包括队列)不是 Obj-C 对象,所以唯一可能的选择是 assign .如果您尝试使用 strong,编译器将抛出错误。或 weak . ARC 对 GCD 没有影响。

https://stackoverflow.com/questions/8904206/

相关文章:

objective-c - NSMutableDictionary 线程安全

ios - 静态和动态单元格的 UITableView 混合?

objective-c - 滚动 NSScrollView 时的回调?

iphone - 更改 UIAlertView 的背景颜色?

ios - swift 中的@property/@synthesize 等价物

iphone - NSDateFormatter,我做错了什么还是这是一个错误?

ios - 仅在 Testflight 构建时应用程序崩溃

ios - 呈现模态视图 Controller 的延迟

objective-c - 在 Objective-C 中定义协议(protocol)的类别?

iphone - 如何在我的 Objective-C 源代码中转义 Unicode 字符?