问题标签 [weak]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
178 浏览

objective-c - ARC IBOutlet 存储类型 iOS 限制

我知道现在使用 Xcode,建议使用 ARC,但是我读过一些关于它与 iOS 4.x 不兼容的信息,至少在使用__weak. 当我创建IBOutlet它时,它提供了作为存储类型的选择,这是否意味着我的应用程序仅限于 iOS 5 或更高版本,或者它仍会在较旧的 iOS 上运行?

0 投票
2 回答
801 浏览

java - SoftReferences vs Weakreferences / OutOfMemoryError

我在处理软引用和弱引用时遇到了问题。代码有一个标志,可以在软引用和弱引用之间切换所有逻辑。虽然使用弱引用似乎一切正常,但使用软引用我一直得到 OutOfMemoryError。MacOSX 上的 JDK7 和 JDK6 以及 Debian 上的 IcedTea6 都会发生这种情况。但是,带有 G1 收集器的 JDK7 是我发现使用软引用的设置,我尝试过的所有其他操作(串行/并行 GC、-client/-server 等)都未能引发异常。

代码有点大,但我试图在保留问题的同时尽可能缩小范围。
我在上面留下了大量评论,更详细地描述了如何重现该问题。

0 投票
3 回答
415 浏览

ios - 自定义委托问题

我正在使用自定义委托和协议功能。

我实现了我的类,如下所示:

我的实现类看起来像:

从另一个班级,我将其设置为:

但是当updateRequired被触发时,它显示为nil

然后我添加了一个 setter 方法,例如:

一切正常!

然后我改变了updateRequired方法(没有自定义设置器),如:

它也工作正常!

我找不到为什么它不适用于第一种情况以及为什么它适用于其他两种情况?

请帮助我找到问题,在此先感谢

0 投票
1 回答
287 浏览

ios - ios __weak 和 __autoreleasing

阅读此线程处理 ARC 中的指针对指针所有权问题的答案后,我遇到了一些问题;

对于演示 1,当传递对“强”属性变量的引用时,会隐式创建一个 hidden(__autoreleasing) 变量,并且不会保留该对象。但是对于演示 4,当传递对“弱”属性变量的引用时,该对象确实会保留一次。

所以我的问题很简单,只是我的好奇心,为什么只有从'__weak'创建的隐藏变量才能获得对象retain+1?这种模式是为任何特殊问题设计的吗?

希望我清楚地解释我的问题,任何帮助将不胜感激。

0 投票
3 回答
1336 浏览

c - 链接期间可以在库之间解析弱符号吗?

我的场景是关于交叉编译到 Arduino Due(ARM 目标),但我想这是一个通用的 C 弱符号问题。

我想将我的固件分成 3 个部分: 1. 硬件库(CMSIS,中间件)-> libHardware.a 2. 实时操作系统库 -> libOS.a 3. 应用程序代码 -> 链接到上面的 Output.elf。

引用的 CMSIS 实现声明了以下内容:

CMSIS 设计的想法是让应用程序代码有选择地实施和处理一些 IRQ。

libHardware.a 的 nm 报告

在我的场景中,我想在 libOS.a 中实现这些 IRQ 处理程序。

我实现了 void SysTick_Handler(void),nm 报告:

然后我将它们链接在一起,这基本上归结为

(分组是必要的,因为操作系统依赖于底层硬件函数。硬件需要调用操作系统提供的 IRQ/main() 函数)

纳米报告:

还是很弱!我希望它使用 libOS.a 中定义的强符号。最后,没有处理 SysTick,这当然会导致灾难性的失败。

另一方面,如果我没有在 libHardware/startup_sam3xa.c 中将它们声明为弱,那么一切正常。如果我选择在 app/app.c 中实现 SysTick_Handler,它也是强链接的。

所以我的问题是:libOS.a 如何实现 libHardware.a 中定义的弱处理程序?或者在这些固件开发场景中,最佳实践是什么?

0 投票
1 回答
728 浏览

uitableview - Xamarin UITableView Source 是弱还是强?

这会导致C#Xamarin 中的内存泄漏吗?即可以释放 MyViewController 还是它有循环引用,阻止它?

在 MyViewController 中:

根据:

如果 UITableViewController 实例化一个在变量中引用自身的嵌套类,它会收集垃圾吗?这不成问题。但是如果 Source 很弱,那么如果你只有:

可以从下一行放出源码吗?无论哪种方式,这似乎都是一个非常危险的 API。

0 投票
1 回答
648 浏览

entity - 这个ER图中的弱实体是什么

http://i.stack.imgur.com/3wdI0.png

请参考上面的链接。'billing_info' 是一个弱实体,因为它完全依赖于'订单'?如果是这样,'bill_id' 是鉴别器吗?

0 投票
1 回答
1098 浏览

c - MinGW GCC / C 替代方案的 .weak 汇编器宏

我有一个带有一些不同库/对象的模块化 C 项目,只有在满足某些条件时才链接到版本。这个项目是用 GCC 3.4.4 for PowerPC 构建的。

因此,在我的整个项目中,有一些 C 文件使用来自其他模块的功能(这些模块不必添加到构建中)。所以这些函数被声明为extern。

根据版本,包含函数本身的模块是否已链接。为了避免未定义的引用,这些函数使用汇编器宏声明为弱。

我试图用一个例子来说明这一点:

ModuleA.c(核心模块)

ModuleB.c(可选模块)

ModuleB 并不总是链接到 ModuleA,仅在某些特定的发布版本中。所以有第三个 C-File

weakfuncs.c(核心模块)

使用此宏,项目始终构建(如果 ModuleB 已链接,bar()将从 ModuleB 调用,如果没有 ModuleB 未链接,bar()将只调用empty_function().

由于整个项目中有很多这样的案例,我的前任将所有这些功能都收集在weakfuncs.c.

到目前为止,这是我只是重用的遗留代码

现在我想用 MinGW (GCC 4.8.1) 为 Windows 编译整个东西。我的问题是编译器似乎对汇编指令有问题:

根本不工作(他不知道blr命令),但这不是问题,因为我可以像这样在 C 中实现一个空函数:

WEAK 宏本身

编译没有问题,但没有效果,意思是,未链接的函数将导致“未定义的引用”,即使我确实在它们上运行了 WEAK 宏。

现在我知道在 gcc 中有一种方法可以像这样为函数赋予弱属性:

这实际上是可行的,但是由于有很多功能都需要适应,所以我更愿意在我weakfuncs.c的宏中进行调整。

是否有任何汇编程序指令或 C 中的方法可以做到这一点,而无需在整个地方更改所有函数声明?

0 投票
3 回答
604 浏览

java - JIT 优化和弱引用

我有以下代码:

方法unwrap()只是创建一个T由 in 中的弱引用引用的 '列表,slaves 并且作为副作用消除了在 中的弱引用null引用slaves。然后是依赖于每个成员slaves引用的排序T;否则代码产生一个NullPointerException.

由于在每个inunwrapped上都有一个引用,因此在排序期间没有 GC 消除一个. 最后,消除 unwrapped 上的引用,从而再次释放 GC。似乎工作得很好。TslavesTunwrapped = null

现在我的问题:

如果我在某些负载下运行许多测试时删除unwrapped = null;此结果。NullPointerExceptions我怀疑 JIT 消除了List<T> unwrapped = unwrap(); ,因此 GCT在排序期间适用于从属中的 's。

你还有别的解释吗?如果您同意我的观点,这是 JIT 中的错误吗?

我个人认为unwrapped = null应该没有必要,因为一返回unwrapped就从框架中移除updateOrdering()。是否有规范可以优化哪些不是?

还是我做错了事?我有想法修改比较器,它允许在null. 你怎么看?

感谢您的建议。

添加 (1)

现在我想补充一些缺失的信息: 首先是 Java 版本:java 版本“1.7.0_45” OpenJDK Runtime Environment (IcedTea 2.4.3) (suse-8.28.3-x86_64) OpenJDK 64-Bit Server VM (build 24.45-b08,混合模式)

然后有人想看方法展开

请注意,在迭代时,将删除 void 引用。事实上我用这个方法代替了

使用我自己的迭代器,但在功能上应该是一样的。

然后有人想要堆栈跟踪。这是其中的一部分。

它指向比较器,与返回的行。

最后,

是一个重要的常数。

添加 (2)

现在观察到,即使 updateOrdering() 中存在“unwrapped = null”,也确实发生了 NPE。

如果在 jit 优化后没有严格的引用,弱引用可能会被 java 运行时删除。源代码似乎根本不重要。

我通过以下方式解决了这个问题:

没有插入任何装饰以防止从属设备被垃圾收集,并且 CMP_IDX_SLV 中的比较器启用以处理对 null 的弱引用:

作为副作用,排序底层列表 List> slaves;将 void 弱引用放在列表的末尾,以后可以在那里收集。

0 投票
2 回答
428 浏览

delegates - 为什么代表应该是 unsafe_unretained 并且不弱?

我将 ARC 添加到我正在开发的应用程序中。不幸的是,它崩溃了。我发现将所有应用程序更新到 ARC 的自动脚本为所有 id<protocolName> 类型提供了 __unsafe_unretained 限定符。

  1. 为什么不是弱类型?我已将该应用程序及其所有子项目部署到 iOS 5,因此我的限定符确实很弱。

  2. 我的主要问题是,如果我将这些代表声明为强,我将有一个保留周期。如果我不这样做,下次我打电话给他们时,他们将成为僵尸。我检查并在我的应用程序崩溃之前,代表是 NSZombie。

这次崩溃的原因是什么,如何预防?