问题描述
(我了解 ARC 的工作原理以及 weak
和 unowned
之间的区别。问题是关于它们的具体用途以及为什么它不起作用。我将使用 {{1} } 在下面的例子中只是为了简单起见。)
请参见下面的示例。注意第 10 行,它旨在将传递的强引用更改为无主引用。我认为这会奏效,但最近在我的代码中使用它时,我发现我错了。
unowned
在 Playground 中运行上述代码。结果显示没有调用deinit,说明字典中保存了对该对象的强引用。
不知道为什么? 1 import Foundation
2 class MyClass {
3 var uuid: UUID = UUID()
4
5 deinit {
6 print("Deinited!")
7 }
8 }
9 func test(_ d: inout [UUID:MyClass],_ o: MyClass) {
10 unowned let u = o // <- !
11 d[u.uuid] = u
12 }
13 var d = [UUID: MyClass]()
14 test(&d,MyClass())
和 weak
关键字是否仅适用于属性?但是上面的代码不会产生编译器错误,而且 Swift book 确实提到它可以用于变量声明:
您可以通过放置 unowned 关键字来指示无主引用 在属性或变量声明之前。
谁能分享一下你是怎么理解的?谢谢!
顺便说一句,我知道如何解决这个问题(例如,使用像 this 这样的包装器)。我试图理解的是为什么上面的代码不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)