簡體   English   中英

使用弱引用時是否可以實現NSFastEnumeration?

[英]Is it possible to implement NSFastEnumeration when using weak references?

我有一個集合,該集合維護對其對象的弱引用。 我希望它符合NSFastEnumeration ,但是countByEnumeratingWithState:objects:count:提供的緩沖區使用unsafe_unretained引用。 這就造成了間隙,在此間隙期間,返回的引用可能無效但不會歸零。

在一般情況下,這很好-如果該集合將其(當前有效但弱引用)對象填充到緩沖區中並返回它,則調用者可能會在需要時創建自己的強引用。 但這留下了兩個問題:

(1)我看不出有任何保證for(){}迭代構造本身會創建對對象的臨時強引用,因此,如果{x}塊的內容以導致要釋放的對象,那么它將有一個懸空的引用。

(2)從countByEnumeratingWithState:返回時,仍然有一個小間隙countByEnumeratingWithState:在此期間,另一個線程上的活動可能會使引用無效。 我的集合並不是線程安全的,但是如果它至少可以安全地存儲對可以在另一個線程上引用的對象的引用,那將是一個很好的選擇,因為在任何多線程應用程序中,實際上都無法阻止這種情況。

您不能直接將強引用返回給調用方。 調用者不會釋放它,並且快速枚舉協議不能保證在調用者完成操作后您將有機會自己釋放它。

相反,您可以在將對象存儲到緩沖區之前保留+自動釋放它們。 這樣可以保證在調用者使用對象時這些對象保持活動狀態。 它可能會損害快速枚舉的“快速”部分,但您仍將獲得“便捷語法”部分。 如果在讀取弱變量后添加了nil檢查,則可以避免將nil指針存儲到緩沖區中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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