我已经阅读了如何在Xcode工具中演示内存泄漏和僵尸对象?但那是针对Objective-C的。这些步骤并不适用。
从这里的阅读中,我理解僵尸对象是指:
我的意思是,在Swift中可以这样做:
从这里的阅读中,我理解僵尸对象是指:
- 已被销毁
- 但仍有指针试图指向它们并给它们发送消息。
我的意思是,在Swift中可以这样做:
var person : Person? = Person(name: "John")
person = nil
print(person!.name)
这个人被释放了吗?是的!
我们试图指向它吗?是的!
那么有人可以分享导致创建悬空指针最常见的错误吗?
IBOutlets
中使用它们),您就不会有问题。 - EmilioPelaeznil
,这意味着无论对象是否仍然被分配,你都不再拥有该对象的引用。也许在 Swift 中获得一个悬垂指针最简单的例子是使用Unmanaged
,例如class C {}; var c = C(); Unmanaged.passUnretained(c).release()
,此时c
就成了一个悬垂指针。但是这并不是一个“常见错误” - 在 Swift 中,你不应该使用这种不安全的结构来获得悬垂指针(因为 Swift 默认是安全的)。 - Hamishlet ptr = UnsafePointer([1, 2, 3])
-ptr
是一个悬空指针,因为数组到指针的转换仅在调用期间有效。希望在 https://github.com/apple/swift/pull/20070 中警告(最终错误)这样的转换。 - Hamish