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

标签 ios objective-c swift reference-counting retaincount

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/

相关文章:

ios - 使用 OpenCV 图像识别为 Objective-C 自定义视频摄像头应用程序添加亮度/ Gamma 控制

ios - 访问 UIAlertControllers 文本字段

dictionary - 如何使用 Swift 枚举作为字典键? (符合等式)

ios - 获取位置后如何进行后台网络调用?

Swift 版本获取错误的像素数据,但 Object-c 版本使用方法 "CGBitmapContextCreate"从同一图像获取正确的像素数据

objective-c - 如何恢复 NSMutableArray 的原始排序顺序?

ios - 如何使navigationItem.searchController的searchBar使用屏幕的整个宽度

ios - 使用 KVO 更改属性时发送通知

ios - Xcode Assets 目录 : Only one copy of each image

ios - 将 NSDictionary 添加到数组