记忆管理 – 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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |