我维护一个调度队列作为我的 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/