2011-12-31 74 views
1

我目前正在查看由功能CFSetCreateMutable()創建的NSMutableSet。該文件指出CFSetCreateMutable()的返回值是免費橋接的,這意味着我可以簡單地將它投入NSMutableSet。這是否意味着發送release消息是完全有效的?我總是可以安全地假設,我總是可以將這些物體當作是通過NS級來編輯的呢?免費橋接對象,保留並釋放

回答

7

想象一下,CFSetCreateMutable()等同於[[NSMutableSet alloc] init],因爲您必須在完成對象後釋放對象。如果您正在使用ARC,則可以使用橋接轉換將CFMutableSet轉換爲NSMutableSet:(__bridge_transfer NSMutableSet *)theCFSet。這將告訴ARC,它在超出範圍之後負責釋放該集合。

+0

那麼基本上免費電橋意味着「等同於所有意圖和目的」?太好了!可悲的是,我不能使用ARC,因爲我需要部署到iOS 4.噢,如果要做內存管理方面的努力,至少我會更深入地瞭解它(這並不是說我真的很想念RAII C++!) – 2011-12-31 21:46:39

1

該文檔指出CFSetCreateMutable()的返回值是免費橋接的,這意味着我可以簡單地將其轉換爲NSMutableSet。這是否意味着發送釋放消息是完全有效的?

是的。 This is explicitly guaranteed in the docs:從例子中的內存管理功能和方法也

注互換,你可以使用CFRelease與可可對象和releaseautorelease了Core Foundation對象。


我總是安全的假設,我總是可以把這樣的對象,好像他們是通過NS-類alloc'ed?

不是真的:目前,任何存在於CFType和NSObject的之間常見的,如-description/CFCopyDescription,無論工作如何創建對象的,但他們並不是所有的明確保障類的工作內存管理消息。