【问题标题】:Is there an exception to these rules when doing bridging [duplicate]进行桥接时这些规则是否有例外[重复]
【发布时间】:2013-03-18 15:31:54
【问题描述】:

这是我目前所做的:

基本上我在做桥接时有这两条规则

从 CF 土地转换为 NS 土地,使用 CFBridgingRelease 从 NS 土地转换为 CF 土地,使用 __bridge。

我从来没有见过来自苹果的示例代码做不同的事情。

这是一个示例:

ABRecordRef ABWhatIsThis= (__bridge ABRecordRef)([self.allMyContacts objectAtIndex:indexPath.row]);

NSString * strName= CFBridgingRelease (ABRecordCopyCompositeName (ABWhatIsThis));

原因是当我想将某些东西从 NS 土地转换为 CF 土地时,我不想改变所有权。 ARC 将保持 NS 土地上的保留计数,并使 CF 土地中的对象保持活动状态,直到其 NS 土地对应部分被破坏。

这就是我使用ABRecordRef ABWhatIsThis= (__bridge ABRecordRef)的原因

如果我将某些东西从 CF 土地转换为 NS 土地,我将使用 CFBridgingRelease。原因是一旦我得到一个指向 CFBridging 的 ARC 对象,我就不会让 CFBridging 保留这些东西。

但是,我仍然感到困惑。何时应该使用 CFBridgingRelease 是否有硬性规定?

我还注意到没有 CFBridging 这样的东西。只有 CFBridgingRelease 和 CFBridgingRetain。我想知道为什么不平衡。

【问题讨论】:

标签: objective-c xcode4.5


【解决方案1】:

__bridge 在 Objective-C 和 Core Foundation 之间传输一个指针,但没有所有权转移。

__bridge_retainedCFBridgingRetain 将 Objective-C 指针转换为 Core Foundation 指针,并将所有权转移给您。您可以使用此函数将 Objective-C 对象转换为 Core Foundation 样式的对象并获取该对象的所有权,以便您可以管理其生命周期。您负责随后释放该对象

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2012-08-20
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多