Har*_*hna 0 reference-counting objective-c ios retaincount swift
SWIFT代码
override func viewDidLoad() {
super.viewDidLoad()
var v1 = ViewController()
let v2 = ViewController2()
print("\(CFGetRetainCount(v1)) and \(CFGetRetainCount(v2))")
}
Run Code Online (Sandbox Code Playgroud)
在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)));
}
Run Code Online (Sandbox Code Playgroud)
在Objective C中,引用计数打印为1和1
为什么参考计数在目标c和swift中有所不同?
它从来没有过,你可以依靠具有特定绝对值保留计数的情况.即使在Objective-C中ARC之前的几天,您也无法将保留计数归结为任何真正意义.你所关心的只是你匹配你写的retains和releases 的数量,如果你保留的对象超过你释放的对象,你就拥有了它,因此它不会消失.
如果对象在应该执行之前消失或者应该在应该消失之前消失,则应该使用对象分配分析工具来查找问题,而不是打印出保留计数.保留计数只是一个实现细节.它甚至可能在将来完全消失.
在上述两种情况中,Swift和Objective-C都在幕后做你不了解或不应该关心的事情.这两个数字都在上下文中.