2013-03-28 35 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樣式的對象,並獲取對象的所有權,以便您可以管理其生命週期。你負責隨後釋放對象