簡體   English   中英

釋放非免費橋接對象的NSArray

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM