[英]Releasing NSArray of non toll-free bridged objects
我正在嘗試管理應用程序中的鑰匙串列表。 我得到這樣的鑰匙串列表:
// _keychains is an instance variable in AppDelegate
_keychains = [NSArray array];
SecKeychainCopySearchList((CFArrayRef *)&_keychains);
所以基本上我得到CFArrayRef
並將其轉換為NSArray
。 現在我的問題是如何釋放keychain ref對象(不透明的結構)? 我是否必須將NSArray
轉換為CFArrayRef
並使用CFRelease
(根據文檔),還是可以客觀地釋放內存?
您應該只能夠在陣列上調用release
。 release
將釋放數組並釋放內容,就像在Cocoa中一樣。
在這種情況下,毫無疑問如何釋放CF / NS-Array,並且在釋放容器之前,您不必擔心元素的壽命。
即使通過CFRelease
發送SecKeychainRef
是非法的,您仍然應該期望這樣做能夠成功,因為系統應該做正確的事情。 CoreFoundation集合和分配器API提供了對分配器和存儲回調的足夠控制, 即使數組的內容與默認行為不兼容(在這種情況下為CFRelease
),安全框架也應該做正確的事情。 他們可以提供自己的回調和分配器。 由於我看不到任何說明其默認行為明顯偏離的文檔,因此我認為可以安全地調用數組上的release
,並且這些元素與CF參考計數過程兼容,或者該集合使用自定義分配器和/或回調方案(由Security提供),並將根據需要清除元素(我猜是前者)。
你可以做[_keychains release]
當你與完成_keychains
。 當_keychains
被釋放時, _keychains
對象將向其每個元素發送一條release
消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.