簡體   English   中英

Xcode 10 Beta 6 Playground中未調用Deinit方法

[英]Deinit method is not called in Xcode 10 Beta 6 playground

我正在研究內存管理概念,發現deinit方法未在Xcode 10 beta 6操場上調用。 最初,我認為可能是代碼中的一些問題。 然后,我在Xcode 9.4.1 Playground和Xcode 10 beta 6示例應用程序中測試了相同的代碼,一切都按預期工作(調用了deinit方法)。 Xcode 10 beta 6游樂場中的錯誤還是其他錯誤? 我正在使用蘋果開發人員的代碼-

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)中似乎仍然存在此問題。 我的操場上有以下代碼:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM