我有一個集合保持其對象的弱引用。我希望它符合NSFastEnumeration
,但countByEnumeratingWithState:objects:count:
提供的緩衝區使用unsafe_unretained
引用。這會產生一個間隙,在此期間返回的參考可能會失效,但不是歸零。在一般情況下這很好 - 如果集合將其(當前有效但弱引用的)對象填充到緩衝區並返回,那麼調用者可能會根據需要創建自己的強引用。但是,這留下了兩個問題:使用弱引用時可以實現NSFastEnumeration嗎?
(1)我看不到任何保證for(){}
迭代構造本身會創建對該對象的臨時強引用,因此如果{x}塊的內容更改集合外的某些內容以某種方式導致對象被釋放,然後它將有一個懸而未決的參考。
(2)從countByEnumeratingWithState:
返回時仍然有一個小的差距,在此期間另一個線程上的活動可能使參考無效。我的集合並不是線程安全的,但如果它至少可以安全地存儲對其他線程可以引用的對象的引用,那將是非常好的,因爲在任何多線程應用程序中確實沒有辦法阻止它。
這可以工作,我想。你有沒有一種方法讓運行時生成一個有保證的保留+自動釋放的方法(也就是說,某種程度上,編譯器在某些時候不能/不會將其優化)? –