我有一个集合保持其对象的弱引用。我希望它符合NSFastEnumeration
,但countByEnumeratingWithState:objects:count:
提供的缓冲区使用unsafe_unretained
引用。这会产生一个间隙,在此期间返回的参考可能会失效,但不是归零。在一般情况下这很好 - 如果集合将其(当前有效但弱引用的)对象填充到缓冲区并返回,那么调用者可能会根据需要创建自己的强引用。但是,这留下了两个问题:使用弱引用时可以实现NSFastEnumeration吗?
(1)我看不到任何保证for(){}
迭代构造本身会创建对该对象的临时强引用,因此如果{x}块的内容更改集合外的某些内容以某种方式导致对象被释放,然后它将有一个悬而未决的参考。
(2)从countByEnumeratingWithState:
返回时仍然有一个小的差距,在此期间另一个线程上的活动可能使参考无效。我的集合并不是线程安全的,但如果它至少可以安全地存储对其他线程可以引用的对象的引用,那将是非常好的,因为在任何多线程应用程序中确实没有办法阻止它。
这可以工作,我想。你有没有一种方法让运行时生成一个有保证的保留+自动释放的方法(也就是说,某种程度上,编译器在某些时候不能/不会将其优化)? –