Swift中“无主(安全)”和“无主(不安全)”之间的区别是什么?

苹果的Swift编程语言指南提到了捕获说明符无主(安全)无主(不安全),以及无主

我(想我)理解无主之间的区别;但是无主(安全)无主(不安全)之间有什么区别呢?导游没有说


请:不要依赖于简单地陈述一个Objective-C等价物

据我所知,虽然我无法从苹果找到确切的来源,无主可以分为两种类型,安全不安全

unownedunowned(safe):它是一个特殊包装的引用,在引用解除分配的实例时会引发异常

特殊情况是无主(不安全):它是目标C的@属性(分配)\uuuunsafe\uunretained的Swift等价物。它不应该在Swift程序中使用,因为它的目的是连接到用Objective C编写的代码

因此,在查看Cocoa类的导入包装器时,您将看到无主(不安全),但除非必须使用,否则不要使用它,并且您将知道何时必须使用它


更新

\uuuu unsafe\u unrepaired是一个简单的指针。它不知道被指向的实例何时被解除分配,因此当它被解除引用时,底层内存可能是垃圾

如果您有一个缺陷,其中使用了解除分配的\uuuuuuuuunsafe\uunrepaired变量,您将看到不稳定的行为。有时,该内存位置足够好,因此代码将运行;有时,它将被部分覆盖,因此会出现非常奇怪的崩溃;有时,该内存位置将包含一个新对象,因此会出现无法识别的选择器异常

过渡到ARC发行说明

\uuuuu unsafe\u unrepaired指定一个引用,该引用不会使被引用对象保持活动状态,并且在没有对该对象的强引用时不会设置为nil。如果它引用的对象被解除分配,指针将悬空

发表评论