gpt4 book ai didi

cocoa - 仪器引用计数

转载 作者:可可西里 更新时间:2023-11-01 02:24:22 24 4
gpt4 key购买 nike

我将下面的代码放在 applicationDidFinishLaunching: 中,并通过 Instruments 结合 Allocations 工具启动应用程序。

func applicationDidFinishLaunching(aNotification: NSNotification) {

var a = Apartment()
var b = a
var c = a
var d = a
}

Apple 关于 Swift 中内存管理的文档包括以下行:

Whenever you assign a class instance to a property, constant, or variable, that property, constant, or variable makes a strong reference to the instance...

我的印象是,对对象的强引用会使该对象的引用计数增加 1。通过让四个变量存储对同一 Apartment 对象的引用,我进一步假设在某个时候 Instruments 将显示此对象的引用计数为 4。但它从来没有。相反,引用计数达到峰值 - 就好像 bcd 存储的引用没有被计算在内。这是为什么?

最佳答案

Clang 编译器非常聪明地删除了不必要的保留/释放电话。在这种情况下,变量 b、c、d 具有相同的生命周期作为 a,因此不需要额外增加引用计数。

如果您制作a、b、c、d(可选)属性:

var a, b, c, d : Apartment?

你的类(class)并将代码更改为

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
a = Apartment()
b = a
c = a
d = a
return true
}

然后您将在 Instruments 中观察到多个保留/释放调用,最终计数为 4。

这再次表明,永远不能依赖保留计数任何特定值。

关于cocoa - 仪器引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751210/

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