为什么 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
?
两个原因:
__weak 仅适用于 ARC 代码,由于显着的性能成本,JRE 仿真库未使用 ARC 构建。
在Objective C中,可以通过判断__weak字段是否为nil来判断是否释放。由于在 Java 中无法对普通引用执行此操作,因此依赖于此行为的代码是平台相关的(即,在 Android 上将无法正常工作)。
J2ObjC 支持 java.lang.reflect 包,所以如果你想要一种使用弱引用的跨平台方式,请使用 WeakReference 而不是 @Weak。
正如我们所知,__unsafe_unretained
不如 __weak
安全,那么为什么 J2ObjC 不将带有 @Weak
的字段转换为 __weak
而 __unsafe_unretained
?
两个原因:
__weak 仅适用于 ARC 代码,由于显着的性能成本,JRE 仿真库未使用 ARC 构建。
在Objective C中,可以通过判断__weak字段是否为nil来判断是否释放。由于在 Java 中无法对普通引用执行此操作,因此依赖于此行为的代码是平台相关的(即,在 Android 上将无法正常工作)。
J2ObjC 支持 java.lang.reflect 包,所以如果你想要一种使用弱引用的跨平台方式,请使用 WeakReference 而不是 @Weak。