苹果的Swift编程语言指南提到了捕获说明符无主(安全)
和无主(不安全)
,以及弱
和无主
我(想我)理解弱
和无主
之间的区别;但是无主(安全)
和无主(不安全)
之间有什么区别呢?导游没有说
请:不要依赖于简单地陈述一个Objective-C等价物
据我所知,虽然我无法从苹果找到确切的来源,无主
可以分为两种类型,安全
和不安全
裸unowned
是unowned(safe)
:它是一个特殊包装的引用,在引用解除分配的实例时会引发异常
特殊情况是无主(不安全)
:它是目标C的@属性(分配)
或\uuuunsafe\uunretained
的Swift等价物。它不应该在Swift程序中使用,因为它的目的是连接到用Objective C编写的代码
因此,在查看Cocoa类的导入包装器时,您将看到无主(不安全)
,但除非必须使用,否则不要使用它,并且您将知道何时必须使用它
更新
\uuuu unsafe\u unrepaired
是一个简单的指针。它不知道被指向的实例何时被解除分配,因此当它被解除引用时,底层内存可能是垃圾
如果您有一个缺陷,其中使用了解除分配的\uuuuuuuuunsafe\uunrepaired
变量,您将看到不稳定的行为。有时,该内存位置足够好,因此代码将运行;有时,它将被部分覆盖,因此会出现非常奇怪的崩溃;有时,该内存位置将包含一个新对象,因此会出现无法识别的选择器异常
过渡到ARC发行说明
\uuuuu unsafe\u unrepaired
指定一个引用,该引用不会使被引用对象保持活动状态,并且在没有对该对象的强引用时不会设置为nil。如果它引用的对象被解除分配,指针将悬空