![]() |
1
1
所以我提出了这个解决方案:
最终API要求订户在调用时识别自己:
虽然我们不能弱引用一个闭包,但是
编辑:
正如OP@Magoo在下面评论的那样
做了一点测试,发现情况确实如此,出乎意料。一些进一步的研究揭示了一个不幸的事实:这是一个警告
This post 彻底解释背后的原因。直接引自 Apple doc : 嗯,所以苹果公司基本上认为,在重新调整大小之前,把它们保存在内存中是可以的。从GC策略POV来看是合理的。
结论:如果
不过我有一个补丁,你可以用
编辑2:
我不喜欢前面提到的修复,因为生成的API不友好。我看不出有什么办法,但@Magoo设法解决了!使用
|
![]() |
2
1
好的,那么@hackape用
|
![]() |
3
0
最简单、可能也是最安全的解决方案是使用您拥有的确切实现,但请确保所有调用者都使用
这样,当执行闭包数组时,任何创建者已经dealloc的闭包都将在调用时立即返回。
如果观察器将被许多不断释放的实例使用,我建议添加一个removeobserver函数。要执行此操作,您可能需要在
|
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |
![]() |
Geremia · 2D NumPy数组+1D数组? 5 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 6 月前 |
![]() |
Paul Williams · 迭代数组时输出有问题 6 月前 |