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 c 和 swift 中的引用计数不同?
最佳答案
从未您可以依赖具有特定绝对值的保留计数。即使在 Objective-C 中的 ARC 之前的日子里,您也无法赋予保留计数任何真正的意义。您所关心的只是匹配了您编写的retain
和release
的数量,如果您保留的对象多于释放的对象,则您拥有它并且因此它不会消失。
如果您遇到一个对象在它应该消失之前消失或者一个对象在它应该消失时没有消失的问题,您应该使用对象分配分析工具来查找问题,而不是打印出保留计数。保留计数只是一个实现细节。它甚至可能在未来完全消失。
在以上两种情况下,Swift 和 Objective-C 都在做一些你不知道或不应该关心的事情。这两个数字都符合上下文。
关于ios - swift 和 objective c 中的对象引用计数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278876/