为什么';t J2ObjC将字段转换为@Weak as_uuuweak但未恢复?

为什么';t J2ObjC将字段转换为@Weak as_uuuweak但未恢复?,j2objc,J2objc,正如我们所知,\uuuuuuuuuuuuuu unrepaired不如\uuuuuuu-weak那么安全,那么为什么J2ObjC不将带有@weak的字段转换为\uuuuuuuuuuuuu-unrepaired __弱仅在ARC代码中有效,并且由于明显的性能成本,JRE仿真库不是用ARC构建的 在目标C中,我们可以通过测试a__弱场是否为零来测试它是否被释放。因为在Java中,对于普通的引用没有办法做到这一点,所以依赖于此行为的代码依赖于平台(即,在Android上不起同样的作用) J2ObjC支

正如我们所知,
\uuuuuuuuuuuuuu unrepaired
不如
\uuuuuuu-weak
那么安全,那么为什么J2ObjC不将带有
@weak
的字段转换为
\uuuuuuuuuuuuu-unrepaired

  • __弱仅在ARC代码中有效,并且由于明显的性能成本,JRE仿真库不是用ARC构建的

  • 在目标C中,我们可以通过测试a__弱场是否为零来测试它是否被释放。因为在Java中,对于普通的引用没有办法做到这一点,所以依赖于此行为的代码依赖于平台(即,在Android上不起同样的作用)

  • J2ObjC支持该包,因此,如果您希望使用弱引用的跨平台方式,请使用WeakReference而不是@weak。

    两个原因:

  • __弱仅在ARC代码中有效,并且由于明显的性能成本,JRE仿真库不是用ARC构建的

  • 在目标C中,我们可以通过测试a__弱场是否为零来测试它是否被释放。因为在Java中,对于普通的引用没有办法做到这一点,所以依赖于此行为的代码依赖于平台(即,在Android上不起同样的作用)


  • J2ObjC支持该软件包,因此如果您希望使用弱引用的跨平台方式,请使用WeakReference而不是@weak。

    谢谢!我原以为Java的
    WeakReference
    会被翻译成
    \uu week
    ,但发现它使用了翻译后的
    Java/lang/ref/WeakReference
    类。我查看了翻译后的
    WeakReference
    的源代码,但没有找到类似于
    \uu-weak
    ,它在ARC下是如何工作的?(我有一个循环引用,必须使用
    weak
    来打破它)一个u unsafe_unrepaired注释解析一个引用循环,这就是为什么j2objc将@weak转换为它。唯一的区别_unsafe_unrepaired和_weak是后者在实例解除锁定时也会将字段归零。对于已翻译的代码来说,这不是问题,因为当实例被解除锁定时,编译器不应该允许引用实例的字段。如果您需要在代码中对字段行为进行归零,请使用java.lang.ref.WeakReference。谢谢您的回答!我已经切换到
    java.lang.ref.WeakReference
    ,但我有点好奇翻译的
    java.lang.ref.WeakReference
    在objc中是如何工作的,它是否在内部使用
    \uu-weak
    ?不,我基于Mike Ash的一篇伟大文章中的java.lang.ref支持:。这是支持课:谢谢!我原以为Java的
    WeakReference
    会被翻译成
    \uu week
    ,但发现它使用了翻译后的
    Java/lang/ref/WeakReference
    类。我查看了翻译后的
    WeakReference
    的源代码,但没有找到类似于
    \uu-weak
    ,它在ARC下是如何工作的?(我有一个循环引用,必须使用
    weak
    来打破它)一个u unsafe_unrepaired注释解析一个引用循环,这就是为什么j2objc将@weak转换为它。唯一的区别_unsafe_unrepaired和_weak是后者在实例解除锁定时也会将字段归零。对于已翻译的代码来说,这不是问题,因为当实例被解除锁定时,编译器不应该允许引用实例的字段。如果您需要在代码中对字段行为进行归零,请使用java.lang.ref.WeakReference。谢谢您的回答!我已经切换到
    java.lang.ref.WeakReference
    ,但我有点好奇翻译的
    java.lang.ref.WeakReference
    在objc中是如何工作的,它是否在内部使用
    \uu-weak
    ?不,我基于Mike Ash的一篇伟大文章中的java.lang.ref支持:。以下是支持类: