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

标签 swift automatic-ref-counting

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

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/

相关文章:

objective-c - 可以在同一个属性声明中同时使用strong和retain吗?

iphone - ARC - UIWebView/UIViewController 留在内存中吗?

swift - NSPopover 中包含的 NSCollectionView 不显示内容

objective-c - Objective-C/ARC 中的 dealloc 会释放局部静态变量吗?

swift - 如何将导航项中的后退按钮文本更改为xcode中的图片

arrays - Swift Array Extension 用 n-previous 值的总和替换索引 n 的值

objective-c - ObjC : Local variable seems to retain its value across function calls

ios5 - 如果将项目转换为自动引用计数(ARC),它是否仍然支持 iOS 3.X、4.X?

ios - Swift - 当 AVPlayer 在后台模式下被覆盖时如何发送通知?

swift - 完成处理程序问题