gpt4 book ai didi

ios - swift 和 objective c 中的对象引用计数不同

转载 作者:行者123 更新时间:2023-11-28 09:50:30 25 4
gpt4 key购买 nike

Swift 代码

 override func viewDidLoad() {
super.viewDidLoad()
var v1 = ViewController()
let v2 = ViewController2()
print("\(CFGetRetainCount(v1)) and \(CFGetRetainCount(v2))")
}

In Swift reference count printing as 2 and 2

Objective-C 代码

- (void)viewDidLoad {
[super viewDidLoad];
ViewController *v1 = [[ViewController alloc]init];
ViewController2 *v2 = [[ViewController2 alloc]init];
NSLog(@"%ld and %ld",CFGetRetainCount((__bridge CFTypeRef)(v1)),CFGetRetainCount((__bridge CFTypeRef)(v2)));
}

In Objective C reference count printing as 1 and 1

为什么 objective cswift 中的引用计数不同?

最佳答案

从未您可以依赖具有特定绝对值的保留计数。即使在 Objective-C 中的 ARC 之前的日子里,您也无法赋予保留计数任何真正的意义。您所关心的只是匹配了您编写的retainrelease 的数量,如果您保留的对象多于释放的对象,则您拥有它并且因此它不会消失。

如果您遇到一个对象在它应该消失之前消失或者一个对象在它应该消失时没有消失的问题,您应该使用对象分配分析工具来查找问题,而不是打印出保留计数。保留计数只是一个实现细节。它甚至可能在未来完全消失。

在以上两种情况下,Swift 和 Objective-C 都在做一些你不知道或不应该关心的事情。这两个数字都符合上下文。

关于ios - swift 和 objective c 中的对象引用计数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278876/

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