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

Object reference count is different in swift and objective c

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都在做一些你不知道或者不应该关心的事情。两个数字都符合上下文。