为什么 J2ObjC 不将带有 @Weak 的字段转换为 __weak 而是 __unsafe_unretained?

Why doesn't J2ObjC translate field with @Weak as __weak but __unsafe_unretained?

正如我们所知,__unsafe_unretained 不如 __weak 安全,那么为什么 J2ObjC 不将带有 @Weak 的字段转换为 __weak__unsafe_unretained?

两个原因:

  1. __weak 仅适用于 ARC 代码,由于显着的性能成本,JRE 仿真库未使用 ARC 构建。

  2. 在Objective C中,可以通过判断__weak字段是否为nil来判断是否释放。由于在 Java 中无法对普通引用执行此操作,因此依赖于此行为的代码是平台相关的(即,在 Android 上将无法正常工作)。

J2ObjC 支持 java.lang.reflect 包,所以如果你想要一种使用弱引用的跨平台方式,请使用 Wea​​kReference 而不是 @Weak。