我使用视图控制器维护调度队列作为属性.我在视图控制器的init方法中创建了一次这个队列,并在一些后台任务中重复使用了几次.在ARC之前,我是这样做的:

@property (nonatomic, assign) dispatch_queue_t filterMainQueue;

在init中:

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

但在ARC之后,我不确定这是否仍然应该是"分配",还是应该是"强"还是"弱".ARC convertor脚本没有改变任何东西,但我不确定这个队列在使用过程中可能会被释放,这是否是一个微妙的错误?

使用ARC时,这三种类型的属性之间的区别是什么?对于调度队列,哪种类型的属性最有效?

推荐答案

最新答案:

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

这由<os/object.h>中定义的OS_OBJECT_USE_OBJC宏控制.当部署目标为OS X 10.8或更高版本,或iOS 6.0或更高版本时,默认设置为1.如果你要部署到一个较旧的操作系统上,那么剩下的数字是0,你应该在下面看到我最初的答案.


原始答案:

调度对象(包括队列)不是Obj-C对象,因此唯一可能的 Select 是assign.如果您try 使用strongweak,编译器将抛出错误.ARC对GCD没有影响.

Objective-c相关问答推荐

[NSNull new]和[NSNull NULL]有什么不同?

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

如何将 CGPoint 添加到 NSMutableArray?

Objective C for循环中断并继续

使用 ARC,什么更好:alloc 或 autorelease 初始化程序?

验证应用内购买的收据

在 UITableViewCells 上显示复制弹出窗口的简单方法,如地址簿应用程序

在Objective-C中从类名的NSString创建对象

NSMutableArray 判断对象是否已经存在

判断 NSInteger 是奇数还是偶数

在 NSMutableArray 的开头添加一个对象?

iPhone - 什么是重用标识符(UITableViewCell)?

我应该使用 NSUserDefaults 还是 plist 来存储数据?

Objective-C构建中的重复符号错误?

iOS ScrollView 需要约束 y 位置或高度

BOOL到 NSString

UIImage上的圆角

如何将 UITableView 滚动到特定位置

Block 隐式保留'self';明确提及touch以表明这是预期行为

带有 UIImage 的 UIBarButtonItem 始终着色 iOS 7