【发布时间】:2016-11-16 23:03:28
【问题描述】:
我在学习 obj-c/swift arc 系统。通过 CFGetRetainCount 函数打印创建实例的保留计数日志。
我期望像这样的引用计数
let foo1 = NSObject() // foo1 retain count 1
let foo2 = foo1 // foo1 retain count 2
foo2 = nil // foo1 retains count 1
foo1 = nil // foo1 retain count 0. release
但实际上..
let foo1 = NSObject() // foo1 retain count 2
let foo2 = foo1 // foo1 retain count 3
foo2 = nil // foo1 retain count 2
foo1 = nil // foo1 retain count 1. release
并直接打印 NSObject() 的保留计数..
print(CFGetRetainCount(NSObject())) // retain count 1
基本上, NSObject() 有 1 个保留计数。并在保留计数达到 2 时释放对象。
我知道当与实例强链接时会增加保留计数。但是刚刚创建的实例有1个retain count,当retain count变为1而不是0时释放实例,这些现象的原因是什么?
【问题讨论】:
-
您的代码甚至没有编译,因为
foo1、foo2是常量。即使您将它们声明为变量,您也不能将nil分配给它们。你真正测试了什么? -
我从不认为 CFGetRetainCount 可以向我展示对象保留计数。尝试简单的代码: var foo1: NSNumber? = NSNumber(值:0)打印(CFGetRetainCount(foo1))。打印的数字很大
-
你在问一个关于代码的问题。发布您所询问的代码是一种常见的礼貌,而不是您当场编造的代码。
-
www.whentouseretaincount.com
-
@bbum 该网站不再工作了。
标签: ios objective-c swift automatic-ref-counting