gpt4 book ai didi

swift - 属性访问期间的 ARC 生命周期

转载 作者:搜寻专家 更新时间:2023-11-01 07:26:15 25 4
gpt4 key购买 nike

假设我有两个类和两个函数,如下所示:

public class DataContainer {
let someData = NSMutableData()
}
public class SuperContainer {
let someDataContainer = DataContainer()
}

func subFunc(someDataContainer: DataContainer) {
// Is someSuperContainer guaranteed to be alive?
// Or may it have been released and only someDataContainer is still alive,
// because someSuperContainer is not referenced anymore?

... do something with someDataContainer ...
}
func superFunc() {
let someSuperContainer = SuperContainer()
subFunc(someSuperContainer.someDataContainer)
}

someSuperContainer 是否保证在 subFunc 返回之前一直存在,或者它可能会在 subFunc 输入后因为不再被引用而被释放?


编辑:更好的例子(我试图让问题保持通用,但现在我认为最好包括一个真实世界的例子):

public class DataContainer {
let someData = NSMutableData()
deinit {
memset_s(someData.mutableBytes, someData.length, 0x00, someData.length)
}
}

func doSomethingWithData(data: NSMutableData) {
// Is DataContainer guaranteed to be still alive?
// Or may it have been released and `data` zeroed-out,
// because someSuperContainer is not referenced anymore
// (and was deinitialized and released)?

... do something with data ...
}
func someFunc() {
let dataContainer = DataContainer()
doSomethingWithData(dataContainer.someData)
}

最佳答案

任何变量或类在其范围结束之前都是可用的和有效的。在您的例子中,someSuperContainer 的范围是 superFunc。当 superFunc 结束时,someSuperContainer 也会结束。

func superFunc() {
let someSuperContainer = SuperContainer()
subFunc(someSuperContainer.someDataContainer)
// someSuperContainer will cease to exist once this func completes.
}

关于swift - 属性访问期间的 ARC 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976332/

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