为什么J2ObjC不将@Weak的字段翻译为__weak而__unsafe_unretained?

时间:2017-12-05 14:50:41

标签: j2objc

众所周知,__unsafe_unretained并不像__weak那样安全,那么为什么J2ObjC不会将@Weak字段翻译为__weak而是__unsafe_unretained

1 个答案:

答案 0 :(得分:2)

有两个原因:

  1. __ weak仅适用于ARC代码,并且由于性能成本显着,JRE仿真库不是使用ARC构建的。

  2. 在Objective C中,可以通过测试是否为零来测试是否释放了__weak字段。由于在Java中没有办法在普通引用中执行此操作,因此依赖于此行为的代码与平台相关(即,在Android上的工作方式不同)。

  3. J2ObjC支持java.lang.reflect包,因此如果您想要一种使用弱引用的跨平台方式,请使用WeakReference而不是@Weak。