加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:52:12 所属栏目:百科 来源:网络整理
导读:苹果公司的 Swift Programming Language Guide 提到,除了软弱无力之外,这些捕获指标是不受保护的(安全的)和未知的(不安全的)。 我(认为我)了解弱者和不了解者之间的差异;但不知道(安全)和未知(不安全)之间有什么区别?指南没有说。 请:不要简单地说明一个
苹果公司的 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读