众所周知,__unsafe_unretained
并不像__weak
那样安全,那么为什么J2ObjC不会将@Weak
字段翻译为__weak
而是__unsafe_unretained
?
答案 0 :(得分:2)
有两个原因:
__ weak仅适用于ARC代码,并且由于性能成本显着,JRE仿真库不是使用ARC构建的。
在Objective C中,可以通过测试是否为零来测试是否释放了__weak字段。由于在Java中没有办法在普通引用中执行此操作,因此依赖于此行为的代码与平台相关(即,在Android上的工作方式不同)。
J2ObjC支持java.lang.reflect包,因此如果您想要一种使用弱引用的跨平台方式,请使用WeakReference而不是@Weak。