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

前端之家收集整理的这篇文章主要介绍了记忆管理 – Swift在“未知(安全)”和“未知(不安全)”之间有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
苹果公司的 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相关文章