问题标签 [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.
swift - 闭包中的无主自我
如果我在另一个闭包中有一个闭包,是否足以在外部闭包中使用一次 unowned/weak 以避免保留循环?
例子:
swift - 之间有什么不同?和 !在 Swift 中的弱、强参考中
我是Swift的初学者。我有一些问题需要解决,但我不能自己解决。
这对我来说有一些问题:
这编译得很好:
- 那么你们能帮我解释一下,两者之间有什么不同吗?和 !在
authorObj!.book?.author = authorObj
和authorObj!.book!.author = authorObj
?
我还有两个问题:
authorObj
是强参考一样authorObj.book.author
吗,它也是强参考吗?因为它没有weak
或unowned
在var之前。只有
authorObj.book
弱参考。但是当我分配authorObj
给 nil 时,所有的都被定义了。为什么?我只分配authorObj
给 nil 但Author()
实例仍然有 1 个强引用authorObj.book.author
ios - 类方法块的保留周期
据我所知,当我们使用块时,我们必须创建一个__weak
使用代码运行该方法的对象实例,然后创建__strong
一个以保持弱者存活:
直到这里很清楚,如果我们从块内部调用 self ,它将自行保留并且永远不会释放。但我的问题是当块在类方法(而不是实例方法)中时如何处理相同的情况,例如在 UIView 动画中:
在这些情况下,我已经看到了几个使用弱/强引用 self 的示例,但是由于没有从任何实例调用完成,它应该保留 self,我错过了什么吗?谢谢!
swift - 从闭包调用的方法中的 self 上下文
在同一个类中,sampleMethod()
从具有弱引用 self() 的闭包中调用方法。self?.sampleMethod()
现在使用的 self 的上下文是sampleMethod()
什么?是弱者还是强者?
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实现中“弱符号”的一些内部机制,但我的问题是:
“弱符号”/“强符号”是 gcc/g++ 的概念,还是 c/c++ 语言规范的一部分。
如果调试和发布结果不同,关于“弱符号”机制,我应该说这是 gcc/g++ 的错误/问题吗?作为开发人员,我不希望我的调试版本的行为与发布版本不同。
我试过clang,不幸的是同样的错误。对于调试/发布“应该”表现如此不同的 C/C++,这是一个“可接受的”案例吗?
javascript - 我可以在不阻止 GC 的情况下从 WeakMap 值对象中存储对关键对象的引用吗?
由于 GC 检测对象图的孤立孤岛以找到从内存中删除的候选对象,并且 WeakMap 不会用弱引用打破孤岛边界,那么这个引用也不用弱引用打破孤岛边界是WeakMap -> KeyObject
有意义的,而引用显然是强的。WeakMap -> Value -> KeyObject
WeakMap -> Value
Value -> KeyObject
例子:
c - 变量声明的 GCC 弱属性
在 GCC 中,如果变量声明为弱属性,并且在(静态)链接时没有找到定义,则该变量的地址为零,即,如果用变量的地址初始化指针,则指针将为NULL,如以下代码片段所示:
foobar.c:
主.c:
输出为:0, 0x20000120 (我使用的是 arm-none-eabi-gcc 5.4.1)
问题是:虽然行为是预期的,但没有文件提到它。谁能指出我解释这种行为的任何材料?谢谢!
swift - Swift 泛型引用类型
我在尝试将泛型类型要求限制为仅引用类型时遇到问题。这是一些示例代码:
如果我将通用要求更改为<Element: class>
,则会收到错误消息class constraint can only appear on protocol declarations
。
这是泛型的限制吗?将协议标记为类就足以对该协议进行弱引用,泛型中是否没有等效项?
swift - Swift XCTest:验证弱变量的正确释放
最近,我试图验证我编写的对象是否使用单元测试正确解除分配。然而,我发现无论我尝试什么,对象都不会在测试完成之前解除分配。所以我将测试简化为一个简单的例子(见下文),它试图证明使用弱变量的对象释放的基础知识。
在我看来,在测试方法退出后,强引用应该停止保留对象,而在下一个运行循环中引用时,弱引用应该为零。但是,弱引用永远不会为零,并且两个测试都失败了。我在这里误解了什么吗?以下是完整的单元测试。
我认为 XCTest 可能会以某种方式推迟释放,但即使将测试方法体包装在 anautoreleasepool
中也不会导致对象释放。
ios - 无法快速分配值类型不匹配
我有以下代码片段。
这曾经在 Swift 2 中运行良好,但现在我收到以下错误消息:
无法将类型“(LLSimpleCamera!,AVCaptureDevice!)-> Void”的值分配给类型“((LLSimpleCamera?,AVCaptureDevice?)-> Void)!”
不太确定如何更改它,我尝试通过更改来匹配类型!到选项,然后添加!在虚空之后,但这不起作用。