【问题标题】:Does CFRetain keep a bridged ObjC object alive?CFRetain 是否使桥接的 ObjC 对象保持活动状态?
【发布时间】:2013-10-05 19:04:23
【问题描述】:

我正在使用 ARC,并且我有一个对象,其引用必须传递给结构:

myStruct->myObject = (__bridge void *)self;

在某些情况下,除此结构中的标准引用之外的所有标准引用都会超出范围,但我仍然希望结构保持对象的保留计数不为 0。

我可以这样做吗? :

CFRetain(myStruct->myObject);

然后当我销毁我的结构时,只需调用

CFRelease(myStruct->myObject);

这些在 void* 桥接引用上被调用,我不确定它们是否使实际的 Objective-C 类保持活动状态。

【问题讨论】:

  • 如果 ARC 在您调用 CFRetain() 之前决定它可以释放您的对象,这可能是有风险的。 CFBridgingRetain() 可以安全地避开该窗口。

标签: objective-c automatic-ref-counting


【解决方案1】:

是的,这行得通。注意你也可以写

myStruct->myObject = CFBridgingRetain(self);

将 Objective-C 对象转换为 const void * 并“取得所有权”。

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多