问题标签 [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 投票
2 回答
2146 浏览

swift - 闭包中的无主自我

如果我在另一个闭包中有一个闭包,是否足以在外部闭包中使用一次 unowned/weak 以避免保留循环?

例子:

0 投票
1 回答
318 浏览

swift - 之间有什么不同?和 !在 Swift 中的弱、强参考中

我是Swift的初学者。我有一些问题需要解决,但我不能自己解决。

这对我来说有一些问题:

这编译得很好:

  • 那么你们能帮我解释一下,两者之间有什么不同吗?和 !在authorObj!.book?.author = authorObjauthorObj!.book!.author = authorObj

我还有两个问题:

  • authorObj是强参考一样authorObj.book.author吗,它也是强参考吗?因为它没有weakunowned在var之前。

  • 只有authorObj.book弱参考。但是当我分配authorObj给 nil 时,所有的都被定义了。为什么?我只分配authorObj给 nil 但Author()实例仍然有 1 个强引用authorObj.book.author

0 投票
1 回答
903 浏览

ios - 类方法块的保留周期

据我所知,当我们使用块时,我们必须创建一个__weak使用代码运行该方法的对象实例,然后创建__strong一个以保持弱者存活:

直到这里很清楚,如果我们从块内部调用 self ,它将自行保留并且永远不会释放。但我的问题是当块在类方法(而不是实例方法)中时如何处理相同的情况,例如在 UIView 动画中:

在这些情况下,我已经看到了几个使用弱/强引用 self 的示例,但是由于没有从任何实例调用完成,它应该保留 self,我错过了什么吗?谢谢!

0 投票
1 回答
43 浏览

swift - 从闭包调用的方法中的 self 上下文

在同一个类中,sampleMethod()从具有弱引用 self() 的闭包中调用方法。self?.sampleMethod()现在使用的 self 的上下文是sampleMethod()什么?是弱者还是强者?

0 投票
2 回答
755 浏览

c++ - 我的模板专业化调试版本与发布版本不同,这是 gcc 错误吗?

首先,我有一个类的头文件,一个没有定义的专业化声明(来自互联网的代码示例)

$猫foo.h

然后有2个模板专业化的实现文件

最后我得到了一个主文件

如果我在没有优化的情况下编译它并运行它,它会给出:

g++ foo_int.cpp foo_float.cpp main.cpp && a.out
init int foo
init float foo

如果我添加优化,那么结果会有所不同:

$ g++ foo_int.cpp foo_float.cpp main.cpp -O2 && a.out
init int foo

结果是不同的。来自互联网的一些解释说这是由于gcc实现中“弱符号”的一些内部机制,但我的问题是:

  1. “弱符号”/“强符号”是 gcc/g++ 的概念,还是 c/c++ 语言规范的一部分。

  2. 如果调试和发布结果不同,关于“弱符号”机制,我应该说这是 gcc/g++ 的错误/问题吗?作为开发人员,我不希望我的调试版本的行为与发布版本不同。

我试过clang,不幸的是同样的错误。对于调试/发布“应该”表现如此不同的 C/C++,这是一个“可接受的”案例吗?

0 投票
0 回答
302 浏览

javascript - 我可以在不阻止 GC 的情况下从 WeakMap 值对象中存储对关键对象的引用吗?

由于 GC 检测对象图的孤立孤岛以找到从内存中删除的候选对象,并且 WeakMap 不会用弱引用打破孤岛边界,那么这个引用也不用弱引用打破孤岛边界是WeakMap -> KeyObject有意义的,而引用显然是强的。WeakMap -> Value -> KeyObjectWeakMap -> ValueValue -> KeyObject

例子:

0 投票
1 回答
880 浏览

c - 变量声明的 GCC 弱属性

在 GCC 中,如果变量声明为属性,并且在(静态)链接时没有找到定义,则该变量的地址为零,即,如果用变量的地址初始化指针,则指针将为NULL,如以下代码片段所示:

foob​​ar.c

主.c

输出为:0, 0x20000120 (我使用的是 arm-none-eabi-gcc 5.4.1)

问题是:虽然行为是预期的,但没有文件提到它。谁能指出我解释这种行为的任何材料?谢谢!

0 投票
2 回答
524 浏览

swift - Swift 泛型引用类型

我在尝试将泛型类型要求限制为仅引用类型时遇到问题。这是一些示例代码:

如果我将通用要求更改为<Element: class>,则会收到错误消息class constraint can only appear on protocol declarations

这是泛型的限制吗?将协议标记为类就足以对该协议进行弱引用,泛型中是否没有等效项?

0 投票
1 回答
1758 浏览

swift - Swift XCTest:验证弱变量的正确释放

最近,我试图验证我编写的对象是否使用单元测试正确解除分配。然而,我发现无论我尝试什么,对象都不会在测试完成之前解除分配。所以我将测试简化为一个简单的例子(见下文),它试图证明使用弱变量的对象释放的基础知识。

在我看来,在测试方法退出后,强引用应该停止保留对象,而在下一个运行循环中引用时,弱引用应该为零。但是,弱引用永远不会为零,并且两个测试都失败了。我在这里误解了什么吗?以下是完整的单元测试。

我认为 XCTest 可能会以某种方式推迟释放,但即使将测试方法体包装在 anautoreleasepool中也不会导致对象释放。

0 投票
1 回答
325 浏览

ios - 无法快速分配值类型不匹配

我有以下代码片段。

这曾经在 Swift 2 中运行良好,但现在我收到以下错误消息:

无法将类型“(LLSimpleCamera!,AVCaptureDevice!)-> Void”的值分配给类型“((LLSimpleCamera?,AVCaptureDevice?)-> Void)!”

不太确定如何更改它,我尝试通过更改来匹配类型!到选项,然后添加!在虚空之后,但这不起作用。