Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Xcode 10 Beta 6中未调用Denit方法_Ios_Swift_Xcode10 - Fatal编程技术网

Ios 在Xcode 10 Beta 6中未调用Denit方法

Ios 在Xcode 10 Beta 6中未调用Denit方法,ios,swift,xcode10,Ios,Swift,Xcode10,我在探索内存管理的概念时发现 deinit方法未在Xcode 10 beta 6游乐场中调用。起初,我认为代码中可能存在一些问题。然后,我在Xcode 9.4.1和Xcode 10 beta 6示例应用程序中测试了相同的代码,一切都正常工作(调用Denit方法)。它是Xcode 10 beta 6游戏场中的bug还是其他什么?我使用的是苹果开发者的代码- class Person { let name: String weak var apartment: Apartment?

我在探索内存管理的概念时发现
deinit
方法未在Xcode 10 beta 6游乐场中调用。起初,我认为代码中可能存在一些问题。然后,我在Xcode 9.4.1和Xcode 10 beta 6示例应用程序中测试了相同的代码,一切都正常工作(调用Denit方法)。它是Xcode 10 beta 6游戏场中的bug还是其他什么?我使用的是苹果开发者的代码-

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中,车辆和人员的去离子都会执行,但在Xcode 10.0(10A255)中,人员的去离子方法不会执行


测试macOS项目中的同一代码在Xcode 9.4.1和Xcode 10.0(10A255)中按预期工作(都执行Denit),这不是测试ARC特性的好地方,因为它对一些中间值有很强的引用。用命令行工具项目测试你的代码,看看会发生什么。@OOPer-OP说它可以在Xcode10应用程序和Xcode9.4中工作。不知道它是有文档记录的(因此是一个bug,可能值得报告)还是没有文档记录的(他们不在乎)。@Deepak他们可以将其视为一个回归,因此可能值得一个简短的bug报告。@目的,谢谢,事实上我错过了OP在应用程序中测试过的内容。但是,还是一样。游乐场、REPL或LLDB不是测试ARC功能的好地方。@目的,OOPer,谢谢你的回答,我希望在回归中,苹果团队会解决它。