面试题答案
一键面试- 常量和变量的作用域与生命周期:
- 常量:
- 作用域:在定义它的类中,从定义处开始到类结束都可见。例如,如果在类的属性位置定义,在类的所有方法和闭包中都可以访问。
- 生命周期:与类实例的生命周期相同。当类实例被创建时,常量被初始化,直到类实例被释放,常量一直存在。
- 变量:
- 作用域:同样在定义它的类中,从定义处开始到类结束都可见。在类的方法中可以多次赋值。
- 生命周期:与类实例的生命周期相同。类实例创建时变量初始化,类实例释放时变量销毁。
- 常量:
- 闭包捕获常量和变量对生命周期的影响:
- 当闭包捕获常量和变量时,会强持有这些量,从而延长它们的生命周期。即使在闭包外部类实例原本可能被释放的情况下,由于闭包的强引用,类实例及其包含的常量和变量也不会被释放,直到闭包被释放。
- 示例代码:
class MyClass {
let constantValue: Int
var variableValue: Int
init(constant: Int, variable: Int) {
self.constantValue = constant
self.variableValue = variable
}
func doSomething() {
let closure = {
print("Constant: \(self.constantValue), Variable: \(self.variableValue)")
}
self.variableValue = 100
closure()
}
}
let myObject = MyClass(constant: 42, variable: 24)
myObject.doSomething()
在上述代码中,constantValue
是常量,variableValue
是变量。doSomething
方法中的闭包捕获了这两个属性。闭包的存在使得 MyClass
实例及其属性在闭包存在期间不会被释放,即使在闭包外部没有对 myObject
的强引用。