gpt4 book ai didi

ios - Xcode 10 Beta 6 Playground 中未调用 Deinit 方法

转载 作者:行者123 更新时间:2023-11-30 10:57:10 25 4
gpt4 key购买 nike

我正在探索内存管理概念并发现deinit 方法未在 Xcode 10 beta 6 Playground 中调用。最初我认为可能是代码中存在一些问题。然后我在 Xcode 9.4.1 Playground 和 Xcode 10 beta 6 示例应用程序中测试相同的代码,一切都按预期工作(调用 deinit 方法)。这是 Xcode 10 beta 6 Playground 中的错误还是其他什么错误?我正在使用苹果开发者的代码-

class Person {
let name: String
weak var apartment: Apartment?

init(name: String) {
self.name = name
print("\(name) is being initialized")
}

deinit { print("\(name) is being deinitialized") }
}

class Apartment {
let unit: String
weak var tenant: Person?

init(unit: String) { self.unit = unit
print("Apartment \(unit) is being initialized")
}
deinit { print("Apartment \(unit) is being deinitialized") }
}

do {
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")

john!.apartment = unit4A
unit4A!.tenant = john
john = nil
unit4A = nil
}

最佳答案

这个问题似乎仍然存在于 Xcode 10.0 (10A255) 中。我有带有以下代码的 Playground :

class Person {
var name: String

func buy(car: Car) {
car.owner = self
}

init(name: String) {
self.name = name
print("Person \(name) is initalized")
}

deinit {
print("Person \(name) is being deinitialized")
}
}


class Car {
let model: String
weak var owner: Person?

init(model: String) {
self.model = model
print("Car \(model) is initialized")
}

deinit {
print("Car \(model) is being deinitialized")
}
}

print("===== before do =====")
do {
print(" ---- do begin -----")
let johnny = Person(name: "John")
let porsche = Car(model: "Carrera4")
johnny.buy(car: porsche)
print(" ---- do end -----")
}
print("===== after do =====")

在 Xcode 9.4.1 中,Car 和 Person 的 deinit 都会执行,但在 Xcode 10.0 (10A255) 中,不执行 Person 的 deinit 方法。

测试 macOS 项目中的相同代码在 Xcode 9.4.1 和 Xcode 10.0 (10A255) 中按预期工作(均执行 deinit)

关于ios - Xcode 10 Beta 6 Playground 中未调用 Deinit 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53833767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com