这是Apple的文档中的一个示例:
class HTMLElement {
let name: String
let text: String?
lazy var asHTML: Void -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
print("\(name) is being deinitialized")
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么这个闭包属性会导致强引用周期,我知道如何解决它.而且我不打算这么说.
让我困惑的是以下代码:
var heading: HTMLElement? = HTMLElement(name: "h1")
let defaultText = "some default text"
heading!.asHTML = {
// confusing, this closure are …Run Code Online (Sandbox Code Playgroud) 指针
如果您有使用 C、C++ 或 Objective-C 的经验,您可能知道这些语言使用指针来引用内存中的地址。引用某种引用类型实例的 Swift 常量或变量类似于 C 中的指针,但不是指向内存中地址的直接指针,并且不需要您写星号 (*) 来表示您正在创建一个参考。相反,这些引用的定义与 Swift 中的任何其他常量或变量一样。
这是 Apple 文档中“指针”的解释。我们都知道,在C++或Objective-c中,指针直接指向内存中的地址。但是在 Swift 中,Apple 说它A Swift constant or variable that refers to an instance of some reference type is similar to a pointer in C, but is not a direct pointer to an address in memory,让我很困惑。我的问题是引用类型背后的场景是什么,如果它不是指向内存中地址的直接指针,它指向哪里?
任何提示或线索将不胜感激。