2013-10-05 50 views
2

我使用ARC,我有一個對象,其引用必須傳遞給一個結構:CFRetain是否保持橋接的ObjC對象存活?

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

在有些情況下比在這個結構之外的所有標準的引用也就過去了超出範圍的情況下,但我仍然希望結構保持對象的保留計數爲0.

我可以這麼做嗎? :

CFRetain(myStruct->myObject); 

再後來,當我毀了我的struct就叫

CFRelease(myStruct->myObject); 

這些越來越呼籲無效*橋接參考,我不知道如果他們繼續,實際的目的-C類活着。

+1

如果ARC決定在您調用CFRetain()之前可以釋放對象,那麼這可能會有風險。 CFBridgingRetain()安全地避免了該窗口。 –

回答

4

是的,那有效。請注意,您也可以寫

myStruct->myObject = CFBridgingRetain(self); 

到Objective-C的對象轉換爲const void *和「取得所有權」。