2013-03-28 65 views
-3

时是否有异常这些规则这是我目前做的:做桥接

基本上做桥接

从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。我不知道为什么不平衡。

+1

这已经被覆盖了一百万次。可能的愚蠢:http://stackoverflow.com/questions/7036350/arc-and-bridged-cast,http://stackoverflow.com/questions/6822473/correct-bridging-for-arc,http://stackoverflow.com /问题/ 14352494 /桥接投桥转移-VS-桥与合成的制定者, – CodaFi 2013-03-28 09:01:00

回答

0

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

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