我想知道xcode的游乐场中的编译流程 . 据我所知,它与Xcode中的相同,但根据游乐场的输出而令人困惑 .
import UIKit
// ARC
class Student {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var reference1: Student?
var reference2: Student?
var reference3: Student?
reference1 = Student(name: "John Appleseed")
reference2 = reference1
reference3 = reference1
reference1 = nil
reference2 = nil
reference3 = nil
//Strong reference cycle
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
init(unit: String) { self.unit = unit }
weak var tenant: Person?
deinit { print("Apartment \(unit) is being deinitialized") }
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Clair")
unit4A = Apartment(unit: "4A")
john!.apartment = unit4A
unit4A!.tenant = john
john = nil
unit4A = nil
Output : -
John Appleseed is being initialized
John Clair is being deinitialized
Apartment 4A is being deinitialized
John Appleseed is being deinitialized
John Appleseed正在被取消初始化
应该打印之前
约翰克莱尔正在被取消初始化
由于 reference3 = nil
将调用类 Student
和 John Appleseed is being deinitialized
的deinit方法应该打印,之后 john = nil
将调用 Person
类的deinit方法并且 John Clair is being deinitialized
应该打印
Note : - 类Person和Apartment类的init方法在上面显示的示例中没有打印任何内容