对象引用计数在 swift 和目标 c 中是不同的



Swift Code

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

在 Swift 中,引用计数打印为 2 和 2

目标 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)));
} 

在物镜 C 中,参考文献计数打印为 1 和 1

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

从来没有这种情况可以

依赖具有特定绝对值的保留计数。即使在 Objective-C 中的 ARC 之前,您也无法将任何真正的意义归因于保留计数。你所关心的只是你匹配你写的retainrelease的数量,如果你保留的对象多于你释放它,你就拥有它,因此它不会消失。

如果某个对象在应该消失之前消失或某个对象

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

在上述两种情况下,Swift 和 Objective-C 都在幕后做一些你不知道或不应该关心的事情。这两个数字在上下文中都是正确的。

最新更新