记忆管理 – Swift在“未知(安全)”和“未知(不安全)”之间有什么区别?

记忆管理 – Swift在“未知(安全)”和“未知(不安全)”之间有什么区别?,第1张

概述苹果公司的 Swift Programming Language Guide提到,除了软弱无力之外,这些捕获指标是不受保护的(安全的)和未知的(不安全的)。 我(认为我)了解弱者和不了解者之间的差异;但不知道(安全)和未知(不安全)之间有什么区别?指南没有说。 请:不要简单地说明一个Objective-C的等价物。 从我的理解,虽然我找不到苹果的最终来源,但不知道可以分为两种,安全和不安全。 一个 苹果公司的 Swift Programming Language Guide提到,除了软弱无力之外,这些捕获指标是不受保护的(安全的)和未知的(不安全的)。

我(认为我)了解弱者和不了解者之间的差异;但不知道(安全)和未知(不安全)之间有什么区别?指南没有说。

请:不要简单地说明一个Objective-C的等价物。

从我的理解,虽然我找不到苹果的最终来源,但不知道可以分为两种,安全和不安全。

一个裸体是未知的(安全的):它是一个特别包装的引用,当引用一个经过实例化的实例时,它将抛出一个异常。

特殊情况是未知的(不安全的):它是Swift等同于Objective C的@property(assign)或__unsafe_unretained。它不应该在Swift程序中使用,因为它的目的是桥接到Objective C中编写的代码。

所以,当您查看Cocoa类的导入包装器时,您将看到uNowned(不安全),除非您必须使用它,否则不要使用它,并且您将知道何时必须。

更新

__unsafe_unretained是一个简单的指针。它不知道什么时候被指向的实例已经被处理,所以当它被取消引用时,底层内存可能是垃圾。

如果您有一个缺陷,其中正在使用已经执行的__unsafe_unretained变量,那么您将看到不正常的行为。有时足够的内存位置足够好,所以代码将运行,有时它会被部分覆盖,所以你会得到非常奇怪的崩溃,有时内存位置将包含一个新的对象,所以你将得到无法识别的选择器异常。

Transitioning to ARC Release Notes

__unsafe_unretained specifIEs a reference that does not keep the referenced object alive and is not set to nil when there are no strong references to the object. If the object it references is deallocated,the pointer is left dangling.

总结

以上是内存溢出为你收集整理的记忆管理 – Swift在“未知(安全)”和“未知(不安全)”之间有什么区别?全部内容,希望文章能够帮你解决记忆管理 – Swift在“未知(安全)”和“未知(不安全)”之间有什么区别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1052895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存